javascript - 为什么我的状态没有及时更新获取的数据,以便 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
他们继续在他们的示例中解释他们使用 count 作为第二个参数:
“如果计数是 5,然后我们的组件重新渲染计数仍然等于 5,React 将比较上一次渲染的 [5] 和下一次渲染的 [5]。因为数组中的所有项目都是相同的 ( 5 === 5), React 会跳过效果。这是我们的优化。”
因此,您希望它重新渲染,但只是到数据更改然后跳过重新渲染的程度。
推荐阅读
- discord.js - Discord.Js 在线状态更新循环修复
- java - Spring Data JPA saveAll 不进行批量插入
- python - 有效地将表示浮点数列表的字符串解析为字符串列表
- python - Python 无法从 dict 写入数据帧。简单的
- asp.net - 我是 .NET Core 2.1 MVC 的新手,我无法理解一些事情是如何工作的
- angular - NSWAG Angular 客户端生成 IFormFile 问题
- google-compute-engine - 无法使用计算 ssh 访问实例:“错误:[....putty.exe] 退出并返回代码 [1]
- python - 存储用户输入数据以稍后在 Python 中调用的方法?
- c# - 在系统上下文中运行的 C#/VC++ 应用程序是否可以访问用户上下文以进行 NTLM/Kerberos 身份验证?
- r - 用重复的名称填充缺失值?