使用react-router-dom v6出现Objects are not valid as a React child错误
解决react-router-dom v6.14.0中出现"Objects are not valid as a React child (found: [object Promise])"错误
这个错误的核心是React试图渲染一个Promise对象,而非合法的React元素。你的路由配置代码本身没有明显问题,但问题大概率出在路由对应的组件内部,结合版本从v6.11.2升级到v6.14.0后触发报错,可按以下步骤排查解决:
- 检查所有路由组件(Home、AddAPost、Login、Register、Post)是否为async函数组件:React不允许组件定义为async函数,因为async函数返回的是Promise,不是React元素。如果组件里有异步操作,去掉async关键字,改用
useEffect处理异步逻辑,把结果存入state后再渲染。
错误示例:
修正写法:async function Home() { const data = await fetch('/api/data'); return <div>{data}</div>; }function Home() { const [data, setData] = useState(null); useEffect(() => { async function fetchData() { const res = await fetch('/api/data'); const result = await res.json(); setData(result); } fetchData(); }, []); if (!data) return <div>加载中...</div>; return <div>{data}</div>; } - 检查组件内部是否直接渲染Promise对象:比如在JSX里直接写
{fetch('/api/data')},这种写法会把Promise当作React子元素,必须先通过useEffect获取结果并存入state后再渲染。 - 修正路由路径格式:你的
/posts:postid路径参数写法有误,应改为/posts/:postid(冒号前添加斜杠),虽然这不是当前报错的直接原因,但会导致路径匹配失败,建议一并修正。 - 清理缓存重新构建:版本升级后缓存可能引发异常,尝试删除
node_modules和package-lock.json,重新执行npm install后启动项目。
内容的提问来源于stack exchange,提问作者Agrim Singh
相关产品推荐
相关产品推荐

