javascript - 在数组上设置状态多次记录空数组
问题描述
我正在尝试从后端服务器获取数据并将其保存在一个数组中。完成此操作后,我想将数组传递给另一个组件。虽然,当我尝试填充数组并将其传递给我的组件时,我得到了多个传递的空数组,而不是一个包含数据的数组。
我首先使用初始化数组的状态useState()
const [data, setData] = useState([]);
然后我有一个从后端获取数据并尝试填充的函数data
。
useEffect(() => {
const fetchData = () => {
fetch('/data')
.then((res) => res.json())
.then((data) => {
for (const property in data) {
setDailyCases([...dailyCases].push(`${data[property]}`));
}
});
}
fetchData();
},[])
当我将它传递data
给另一个组件时:<DataComp data={data}
,我没有得到我期望的数据。
当我console.log(props.data)
这是输出时:
这很奇怪,因为如果我console.log()
在运行数据循环时所有数据都是可见的:
如何确保data
数组正确更新,并在通过时得到一个包含所有数据的数组?
这是DataComp
组件:
const DataComp = (props) => {
console.log(props.cases)
return (
<h1>Testing</h1>
)
}
export default DataComp
使用@Fardeen Panjwani 回答我的组件正在获取正确的数据,尽管我现在得到了更多预期的控制台输出?
解决方案
您永远不会setData
使用获取的数据作为参数进行调用。
useEffect(() => {
const fetchData = () => {
fetch('/data')
.then((res) => res.json())
.then((_data) => { // using "_data" in order to avoid clash with the state-hook
setData(_data) // <= this line is responsible for populating the "data" value.
for (const property in _data) {
setDailyCases([...dailyCases].push(`${_data[property]}`));
}
});
}
fetchData();
},[])
为了更新data
的值,您需要调用该setData
方法。
推荐阅读
- web - 部署时有没有办法控制nuxt缓存?
- json - 将 JSON 解析为字符串键和值
- azure - 自动化 Azure Question 以生成基础架构
- visual-studio-code - 如何在 VScode mac 上调试特使单元测试
- java - 算术问答游戏中每次运行时游戏屏幕上的随机问题数
- android - Nativescript 模拟器安装头疼
- highcharts - 如何为 Highcharts 标记添加单独的注释样式工具提示?
- javascript - 如何使一个组件具有全屏背景图像?
- android-studio - 为什么android studio 3.3版没有Toolbar(Action Bar)
- c++ - 析构函数是移动 ctor/assignment 的 RHS 上唯一调用过的东西吗?