为什么我的状态没有及时用提取的数据更新,以便useEffect用新状态更新我的DOM



我是React中使用钩子的新手。当组件第一次装载时,我试图通过使用useEffect((和空数组的第二个参数来获取数据。然后我尝试用新数据设置我的状态。这似乎是一个非常简单的用例,但我一定做错了什么,因为DOM没有用新状态更新。

const [tableData, setTableData] = useState([]);    
useEffect(() => {
const setTableDataToState = () => {
fetchTableData()
.then(collection => {
console.log('collection', collection) //this logs the data correctly
setTableData(collection);
})
.catch(err => console.error(err));
};
setTableDataToState();
}, []);

当我在setTableData((调用周围放置足够长的超时时间(5ms不起作用,5s起作用(时,准确的tableData将按预期显示,这让我认为在集合真正准备好之前,我的fetch函数返回可能有问题。但是setTableData((之前的console.log((正在输出正确的信息——我不确定如果到那时代码中的数据还不可用,它怎么能做到这一点。

我希望这是我所缺少的非常简单的东西。有什么想法吗?

传递给useEffect的第二个参数可用于跳过效果。

文件:https://reactjs.org/docs/hooks-effect.html

他们接着在他们的例子中解释说,他们使用计数作为第二个论点:

"如果计数为5,则我们的组件在计数仍然的情况下重新渲染等于5,React将比较之前渲染的[5]和[5]从下一次渲染开始。因为数组中的所有项都相同(5===5(,React将跳过该效果。这就是我们的优化">

因此,您希望它重新渲染,但仅限于数据更改的程度,然后跳过重新渲染。

最新更新