触发useEffect生命周期(componentdidmount)之后,clear方法将立即调用

时间:2020-03-25 11:29:01

标签: reactjs react-hooks use-effect react-functional-component

我写了一个自定义钩子,以防止useEffect触发的数据中的任何无用的更新(例如,当我在useEffect依赖项中发送一个对象,导致每次触发useEffect触发时,或者当将对象发送给useEffect时触发,但分层数据对象中的对象已更改,但useEffect无法检测到它们并且不执行任何操作)

export const useUpdateEffect = (callback, dependencies) => {

  const previousDeps = useRef(null);

  useEffect(() => {
    const haveChange = JSON.stringify(dependencies) === JSON.stringify(previousDeps.current)
    if (haveChange) return;

    const returnCallback = callback(previousDeps.current);

    return () => {

      if (typeIs(returnCallback, "Function")) {
        returnCallback();
      }

      previousDeps.current = dependencies;
    }
  }, [callback, dependencies])
}

如果dependencies被更改(具有任何层)后,此挂钩即可完成其工作。该钩子还保存depenedencies,并使用它们与当前值进行比较。 (例如componentDidUpdate)。

但是此代码上的问题是,当我尝试发送带有return的干净方法时。 useEffect主体起作用后,将立即调用clean方法。

我需要知道此挂钩有什么问题。 要查看该问题,请尝试使用useUpdateEffect使用以下代码,并查看该问题的含义。 https://stackoverflow.com/a/53090848/6737576

0 个答案:

没有答案