2 回答
TA贡献1860条经验 获得超8个赞
我认为前端会在 setCharacterInfo 决定甚至设置任何内容之前尝试渲染。
没错,您的组件useState在函数useEffect运行之前使用默认值渲染一次。下面是组件挂载、更新和卸载时的执行顺序图(注意render发生在 之前useEffect):
https://raw.githubusercontent.com/donavon/hook-flow/master/hook-flow.png
characterInfo.models在访问name.
return (
<div>
{
characterInfo.models &&
characterInfo.models.length &&
characterInfo.models[0].name
}
</div>
)
或者,如果您使用可选链接:
return (
<div>
{characterInfo?.models[0]?.name}
</div>
)
另一个注意事项 - 您将 的初始值设置characterInfo为一个空数组。如果将它设为一个空对象,就会更清楚地表明您希望它data是一个对象,而不是数组。
const [characterInfo, setCharacterInfo] = useState({});
TA贡献2039条经验 获得超7个赞
您可以将返回语句调整为仅在名称存在时呈现名称
return (
<div>
{characterInfo.length && characterInfo.models[0].name}
</div>
)
添加回答
举报