我有一个将深层对象作为参数的组件。我希望能够根据我传递的属性动态更改我的组件 - 但由于某种原因,我的useEffect()
循环不会在我第二次传递对象时运行,这自然是因为它是一个深层对象哪个useEffect()
不“识别”
我的代码如下:
<MyComponent groups={sourceArray}/>
function MyComponent({ groups }) {
useEffect(() => {
//Do something
}, [groups])
为了澄清起见,我的数据是一个对象数组。
我确实尝试了几件事来让它工作 - 但由于某种原因,我无法触发我的效果循环:
第一个不起作用的替代解决方案(useRef)
useEffect(() => {
if (prevGroups && !isEqual(prevGroups, groups)) {
// do something
}
}, [groups])
const usePrevious = (value) => {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
};
const prevGroups = usePrevious(groups);
也失败的第二个解决方案(外部库)
我尝试使用以下库, - 也没有任何运气。
最后,我不确定这里发生了什么以及如何让我的 useEffect 循环在更新时运行。
简单的解决方案是删除依赖数组 - 但这只会使 useEffect 循环无限运行
更新
对象具有以下结构:
[{"name": "123", "id": "1", "children": [{...}]}]
另外,我将值作为 useState() 传递,即:
const funcToChangeObj = () => {
//logic to change sourceArray
setSourceArray(changedArray)
}
setSourceArray(changedArray)
-> setSourceArray(changedArray.slice())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句