【发布时间】:2020-09-23 23:15:59
【问题描述】:
我想做什么?
通过 React Hooks 将 characterInfo 渲染到前端。
目前尝试这样做的代码是什么?
呈现信息的前端组件:
export default function ReactComponent() {
const [characterInfo, setCharacterInfo] = useState([]);
useEffect(() => {
socket.emit("/character/read");
socket.on("/character/read", function (data) {
if (data.status === "SUCCESS") {
setCharacterInfo(data)
}
});
return () => {
socket.off("/character/read");
};
}, []);
return (
<div>
{characterInfo.models[0].name}
</div>
)
}
后端.json信息作为“数据”以及setCharacterInfo保存到characterInfo的内容:
{
status: "SUCCESS"
models: [
{
name: "AC",
element: "Air",
}
{
name: "Irene",
element: "Fire",
}
]
}
(所以在这种情况下访问“AC”,它将是characterInfo.models[0].name)
我期望结果是什么?
我希望只呈现AC。
实际结果如何?
我会收到这个错误:
TypeError: Cannot read property '0' of undefined
我认为问题可能是什么?
我认为它必须处理异步平衡,尤其是useEffect()。我认为前端会在 setCharacterInfo 决定设置任何内容之前尝试渲染。
【问题讨论】:
-
你需要遍历你的结果。在渲染时使用类似“地图”的东西
-
另外,当您的状态设置为 characterInfo 时,您的设置数据作为您状态的一部分
-
对于第一条评论,如果你说
{characterInfo.models.map((model) => (<div>{model.name}</div>))},我会收到的错误是TypeError: Cannot read property 'map' of undefined'.对于第二条评论,是的,我将“数据”放入setCharacterInfo作为状态,那么“数据”应该是我characterInfo状态。
标签: javascript reactjs react-hooks use-effect use-state