我写了一个自定义钩子,以防止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