如何仅在完成某个操作后才渲染 React 组件?
2021-06-07
436
我想显示本地存储的 JSON 文件中 JSON 对象的某些属性。因此,我尝试这样做:
import { DistroList as distroList } from '../backend/distroList.json'
useEffect(() => {
for(let distro in distroList) {
if(distroList[distro].Name === distroName) {
setDistroFeature(distroList[distro])
}
}
}, [])
return (
<div>
<h1>{distroFeature.Origin}</h1>
</div>
)
由于 for 循环需要时间来查找匹配的对象,并且组件到那时才安装,因此我收到错误
TypeError: Cannot read property 'Origin' of null
我尝试使用 fetch API 并努力使其异步。我做不到。我想做这样的事情:
import { DistroList as distroList } from '../backend/distroList.json'
useEffect(() => {
// Fetch the object from distroList.json
// Update state variable
}, [])
return(
Display the updated state variable
)
我该如何实现?
提前致谢 :)
2个回答
以下解决方案之一可能适合您。
第一个解决方案。
<div>
{distroFeature && <h1>{distroFeature.Origin}</h1>}
</div>
第二个解决方案。
<div>
<h1>{distroFeature?.Origin}</h1>
</div>
M.Hassan Nasir
2021-06-07
您应该将 distroList 作为参数添加到 useEffect 钩子中。这样,当 distroList 的值发生变化时(在本例中为“未定义”),它将重新运行效果。
这应该有效:
import { DistroList as distroList } from '../backend/distroList.json'
useEffect(() => {
if (distroList && distroList.length > 0) {
for(let distro in distroList) {
if(distroList[distro].Name === distroName) {
setDistroFeature(distroList[distro])
}
}
}
}, [distroList])
return (
<div>
<h1>{distroFeature.Origin}</h1>
</div>
)
EvaBat
2021-06-07