错题本:react-hooks useEffect触发时机,依赖项为对象或者数组时

447 阅读1分钟

Q:

useEffect的第二个依赖项不是基本数据类型,而是数组或者对象这种复杂数据类型,因为useEffect是浅比较,所有如果依赖项是对象和数组,那个浅比较失效

A: 解决方案:

1.使用useRef

需要写个usePrevious的钩子方法即可 ``


function usePrevious(value) {

const ref = useRef();

useEffect(() => {

ref.current = value;

}, [value]);

return ref.current;

}

然后使用


let defaultKeysRef=usePrevious(defaultKeys);

useEffect(() => {

if (!equalsObj(defaultKeysRef, defaultKeys)) {

setDisplayKeys(defaultKeys);

}

}, [defaultKeys, defaultKeysRef]);

第二种:使用use-deep-compare-effect包

npm install use-deep-compare-effect --dev-save


import useDeepCompareEffect from 'use-deep-compare-effect';

useDeepCompareEffect(() => {
    //需要执行的方法
  }, [obj]);