useEffect 依赖是数组 而数组引用地址 又不停变化解决方案: 用useRef

如题:
useEffect 依赖是数组 而数组引用地址 又不停变化解决方案

最粗暴的解决方法,而我也在项目中用过几次,很无奈

方法1:

useEffect(() => {
  ...
}, [JSON.stringify(object)]);

方法2:
可以基于 useRef 和深比较方法来解,useRef 的特性是跨渲染周期缓存数据。此处用来缓存上一次渲染的数据,并调用深比较方法判断,如果两个对象相等则返回上一次的数据,地址自然也没有变化。

import { isEqual } from 'lodash';

const useCampare = (value: any, compare: any) => {
  const ref = useRef(null);

  if (!compare(value, ref.current)) {  // deep compare
    ref.current = value;
  }

  return ref.current;
}

const compareObject = useCampare(object, isEqual);

useEffect(() => {
  ...
}, [compareObject]);

你可能感兴趣的:(前端react.js)