我有一个useEffect(),当对象数组发生更改时应该触发。
useEffect(() => {
setNotesToRender(props.notes)
}, [props.notes]);
useEffect 依赖项无法比较对象数组,因此上例中的 useEffect() 触发次数比需要的要多。我希望只在数组不同的情况下触发 useEffect()。
触发更新的数组示例:
array1 = [{id:1,title:'one'},{id:2,title:'two'},{id:3,title:'three'}]
array2 = [{id:1,title:'one'},{id:2,title:'two'},{id:3,title:'four'}]
迄今为止我测试过的内容包括:
- props.notes.length --> 可以工作,但不可靠——显而易见的原因 :)
- ...props.notes --> 如果数组为空则无法工作,并可能导致严重的性能问题?
比较两个对象数组的最有效方式是什么?这些数组可能包含超过1000个对象。
此致敬礼/K
更新 稍后我需要使用文本搜索过滤掉某些“notes”,这就是为什么我使用了React状态。这在我的示例代码中没有显示出来。
props.notes
依赖项开始是正确的,然后在 effect 中对每个元素进行更深层次的相等性检查,以调用setNotesToRender
。例如,是否有任何元素属性的差异,还是只有特定的属性?您可能还需要实现 usePrevious react hook,以便可以进行更深层次的值比较,因为 react 使用引用相等性。 - Drew Reese