【发布时间】:2022-06-18 02:48:47
【问题描述】:
告诉我为什么更改用户状态后页面上的重新渲染不起作用 再次单击页面后会发生更改,而不是立即发生。
useEffect(() => {
const sortfdb = Datadb.sort((a,b) => b.count - a.count);
console.log(sortfdb)
setDatadb(sortfdb);
console.log(Datadb)
},[Datadb])
我在页面上有一个字段,我将添加一个数字,它写入 useState([]),当更改 useState 时,它应该对它们进行排序。但这并没有发生。只有当我添加一个新号码时才会发生这种情况。
useEffect,它捕获更改、工作并在控制台中按应有的方式显示所有内容,但不想立即在页面上更改它 它在 React 17 中运行良好,但现在不行。我不知道出了什么问题
更新
我意识到我的错误,我必须提供一个数组排序
setDatadb(el=>[...el].sort((a,b) => b.count - a.count));
但是现在它会无限期地抛出错误,因为渲染是不断发生的
next-dev.js?3515:25 Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
【问题讨论】:
-
React 18 有一些差异所以推荐使用 React 17
-
这点我已经明白了,不过18号正式出老版我看不出有什么意义
-
您不应该在 useEffect 中使用 setDatadb 并将 Datadb 设置为依赖项。会导致死循环。
标签: reactjs react-hooks