如果prop值从一个空数组更改为另一个空数组,我正在处理的react应用程序将触发userEffect
函数。
我从页面获取查询参数,并将它们传递到一个组件中,如果任何查询参数数组发生更改,该组件将重新呈现它们。但问题是,即使查询参数数组从[]
更改为[]
,useEffect
函数也会触发并重新呈现组件。
我知道[] !== []
,也许这就是导致问题的原因。但是,有没有一种方法可以防止应用程序首先触发useEffect函数呢?
这是一个codesandbox演示:https://codesandbox.io/s/vibrant-greider-qgjgs?file=/src/App.js
发布于 2020-09-04 06:36:38
您正在为测试分配一个新的引用,因此它将触发更新。
您应该重新分配相同的数组,并在其中进行操作。
const handleClick = () => {
const arr = test
setTest(arr);
};
发布于 2020-09-04 06:39:55
您可以创建自己的自定义钩子来检查每个依赖数组项的深度相等,也可以使用use-deep-compare-effect之类的钩子
发布于 2020-09-04 07:06:07
除了上面的答案,you can also use React.memo
as a way to do a comparison check between previous props and new props。如果你的道具有点复杂,你也可以在上面加上Lodash。
https://stackoverflow.com/questions/63735803
复制相似问题