【发布时间】:2021-10-15 09:10:05
【问题描述】:
我想做什么?
我正在尝试设置一个对象数组,其中数组中的值取决于父组件。
目前尝试这样做的代码是什么?
以下是简化的不同文件:
// Parent.
export default function Parent() {
const [filePaths, setFilePaths] = useState();
useEffect(() => {
var fileContent = JSON.parse(fs.readFileSync("./config.json"); // Reading from a JSON.
var tempFilePaths = [];
fileContent.FilePaths.forEach((file) => {
tempFilePaths.push(file);
});
setFilePaths(tempFilePaths); // Contents of "config.js" is now in the "useState".
}, []);
return (
<Child filePaths={filePaths}/>
)
}
// Child.
export default function Child({filePaths}) {
var links = [
{
path: filePaths[0].Link1,
},
{
path: filePaths[0].Link2,
},
]
return (
<div>Nothing here yet, but I would map those links to front-end links.</div>
)
}
// config.json
{
"url": "http:localhost:3000",
"FilePaths": [
{
"Link1": "C:\Documents\Something",
"Link2": "C:\Documents\SomethingElse"
}
]
}
当我在子组件的return() 中渲染“filePaths”时,可以渲染“filePaths”,但我希望将“filePaths”设置为变量“links”。
我期望结果是什么?
我希望变量“links”在子组件中很好,能够在子组件中使用。
实际结果如何?
启动应用程序时,我得到一个TypeError: Cannot read property '0' of undefined.
我认为问题可能是什么?
我认为子组件在父组件没有完成useEffect() 的情况下呈现。我想知道是否有办法告诉子组件等待父组件完成,然后继续设置“链接”变量。
【问题讨论】:
-
filePaths在父级中未定义,直到由setFilePaths(tempFilePaths);在useEffect挂钩中设置。似乎消费组件假定它已定义。请分享一个完整的代码示例来重现您的问题。
标签: javascript reactjs react-hooks state