【发布时间】:2021-08-12 18:04:35
【问题描述】:
我有一个父组件,它获取数据并将其存储到 useState 中,然后作为 props 传递给子组件。
当该子组件被渲染时,我将该道具数据存储到 useState 中,然后我尝试使用 map 或 forEach 函数进行迭代,但我得到 cannot read property of undefined errors
在检查 React 开发工具时,存在从父级传递给子级的数组,所以我不太确定自己做错了什么。
父组件:
const DisplayOpenIncidents = () => {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
const incidents = FetchIncidents();
incidents.then((incidents) => {
setData(incidents);
setLoading(false);
});
}, []);
return (
<AccordionExample data={data} />
);
};
子组件:
const AccordionExample = (props) => {
const [test, setTest] = useState(props.data);
useEffect(() => {
console.log(props.data); // Displays array
setTest(props.data);
}, [props]);
return (
<Accordion defaultActiveKey="0">
<Card>
<Accordion.Toggle as={Card.Header} eventKey="0">
TITLE
</Accordion.Toggle>
<Accordion.Collapse eventKey="0">
<Card.Body>
{test.forEach((test) => {
console.log(test);
})}
</Card.Body>
</Accordion.Collapse>
</Card>
</Accordion>
);
};
TIA
【问题讨论】:
-
为什么要在 useEffect 中设置
test? -
@evolutionxbox 无论哪种方式,将其设置在 useEffect 中或根本不设置仍然不允许我对其进行迭代
-
你为什么要将道具复制到状态中?这是一个已知的anti-pattern
-
这可能是因为 - FetchIncidents 返回未定义。这应该是异步调用吗?即作为 const 事件 =await FetchIncidents();
标签: javascript reactjs