React+Rails项目报Objects are not valid as a React child错误排查
问题根因
这个报错是React尝试直接渲染普通JS对象触发的——React只能渲染字符串、数字、合法JSX节点等基础类型/合规元素,不能直接把普通对象作为子节点渲染,你代码里的错误出在Redux派发登录态的逻辑部分:
你在dispatch更新LOGGED_IN_USER状态时,错误地给用户信息多套了一层name嵌套:
// 错误写法 dispatch({ type: 'LOGGED_IN_USER', payload:{ name: { name: res.data.name, token: idTokenResult, role: res.data.role, id: res.data._id } } })
这段代码最终存到Redux里的用户状态中,name字段不是你预期的用户名字符串,而是一个包含name、token、role、id四个属性的完整对象。后续你在Navbar或者其他页面组件中,从Redux取登录用户的name字段直接渲染时,实际传入渲染的是这个对象,就触发了报错。
修复方案
删掉多余的对象嵌套,把用户信息直接挂在payload对应字段下即可:
// 修复后写法 dispatch({ type: 'LOGGED_IN_USER', payload: { name: res.data.name, token: idTokenResult, role: res.data.role, id: res.data._id } })
修复后可以顺带检查下项目中所有渲染Redux用户状态的位置,确保没有直接渲染整个用户对象的写法,所有渲染值都取对象下的基础类型字段(比如user.name、user.role这类字符串/数字值)。
内容的提问来源于stack exchange,提问作者ReactAddict
相关产品推荐
相关产品推荐

