【发布时间】:2021-01-08 19:14:38
【问题描述】:
我有一个这样的组件。我想要的是 useEffect 函数在myBoolean 更改时随时运行。
我可以通过将依赖数组设置为[myBoolean] 来实现这一点。但随后我收到警告说我违反了exhaustive-deps 规则,因为我在函数内部引用了myArray。我不想违反那个规则,所以我将依赖数组设置为[myBoolean, myArray]。
然后我得到一个无限循环。发生的事情是每次myArray 更改时都会触发 useEffect,这是每次,因为事实证明 myArray 来自 redux,并且在每次重新渲染时都会重新生成。而且即使数组的元素和之前的一样,React 还是使用=== 比较数组和之前的版本,结果不是同一个对象,所以不相等。
那么正确的方法是什么?如何在不违反exhaustive-deps 规则的情况下仅在myBoolean 更改时运行我的代码?
我见过this,但我仍然不确定这种情况下的解决方案是什么。
const MyComponent = ({ myBoolean, myArray }) => {
const [myString, setMyString] = useState('');
useEffect(() => {
if(myBoolean) {
setMyString(myArray[0]);
}
}, [myBoolean, myArray]
}
【问题讨论】:
标签: javascript arrays reactjs redux