【发布时间】:2020-06-09 05:57:23
【问题描述】:
所以我有一个关于 useEffect 依赖项的问题
这是来自反应文档:
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes
这到底是什么意思,React 是否跟踪 count 变量及其值,并在值更改时做出反应,或者 React 是否跟踪数组中的第一个元素及其值。
这是什么意思?让我再解释一下。因此,如果我们有类似 [name] 的东西作为依赖项。在评估时,数组可能会产生['Bob'] 或['Steve']。显然这是一个改变,useEffect 将重新渲染组件。但是它是如何检查的呢?
它是跟踪name 还是跟踪dependencyArray[0]。如果我们看一下前面的例子,这两个结果都会为真,name 和first element 都将它们的值从'Bob' 更改为'Steve'。但它实际上是如何工作的呢?
目前在我的代码中,我正在使用类似 [employees[selectedEmployee].name] 的东西,其中 selectedEmployee 是 UI 上可点击的东西,它变成了“Bob”或“Steve”
例如:
const employees = {
Bob: {
name: 'Bob'
},
Steve: {
name: 'Steve'
}
}
这意味着最终,在评估时,依赖数组仍然会产生['Bob'] --> ['Steve'],如果 React 正在评估 dependencyArray[0],那么显然已经改变并且组件应该重新渲染,但是如果它跟踪引用,那么我将完全更改引用,这可能会导致问题。
那么正确的方法是什么?我可以使用像employees[selectedEmployee].name 这样的动态属性作为依赖项吗?
【问题讨论】:
标签: reactjs react-hooks use-effect