const changedRef = useRef<number>(0);
useEffect(() => {
console.log('<<<<<changedRef>>>>>>', changed);
}, [changedRef.current])
这个时候会报
Mutable values like 'changedRef.current' aren't valid dependencies because mutating them doesn't re-render the component
意思是由于ref不能引起渲染,所以useEffect不能监听它。
那么一些use-deep-compare-effect
下面这样的写法,没问题吗?
import { useRef, useEffect } from 'react';
import _ from 'lodash';
export function useDeepCompareEffect<T>(fn, deps: T) {
// 使用一个数字信号控制是否渲染,简化 react 的计算,也便于调试
let renderRef = useRef<number | any>(0);
let depsRef = useRef<T>(deps);
if (!_.isEqual(deps, depsRef.current)) {
renderRef.current++;
}
depsRef.current = deps;
return useEffect(fn, [renderRef.current]);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…