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