useEffect() 不会在属性对象更改时触发(深度对象)

杰佩·克里斯滕森

我有一个将深层对象作为参数的组件。我希望能够根据我传递的属性动态更改我的组件 - 但由于某种原因,我的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章