代码之家  ›  专栏  ›  技术社区  ›  Jeppe Christensen

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

  •  0
  • Jeppe Christensen  · 技术社区  · 3 年前

    我有一个组件,它以一个深的对象作为参数。我希望能够基于我传递的属性动态地修改我的组件——但出于某种原因,我的 useEffect() useffect() 不“认识”

    <MyComponent groups={sourceArray}/>
    
    function MyComponent({ groups }) {
        useEffect(() => {
            //Do something
        }, [groups])
    

    为了澄清,我的数据是一个对象数组。

    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);
    

    第二个同样失败的解决方案(外部库)

    我试着使用下面的 library

    最后,我不确定这里发生了什么,也不确定如何在更新中运行useEffect循环。

    简单的解决方案是删除依赖项数组,但这只会使useEffect循环无限运行

    更新

    对象具有以下结构:

    另外,我将该值作为useState()传递,即:

    const funcToChangeObj = () => {
        //logic to change sourceArray
        setSourceArray(changedArray)
    }
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   Noah Gaeta    3 年前

    setSourceArray(changedArray) -&燃气轮机; setSourceArray(changedArray.slice())