Effect
useDeepCompareLayoutEffect
用于深度比较依赖的 Layout Effect Hook
用法
用法与 useLayoutEffect 一致,不同的是,会深度比较依赖。
effectCount: 0
deepCompareCount: 0
源码
import { useLayoutEffect } from 'react';
import { createDeepCompareEffect } from '../createDeepCompareEffect';
export default createDeepCompareEffect(useLayoutEffect);import { useRef } from 'react';
import type { DependencyList, useEffect, useLayoutEffect } from 'react';
import { depsEqual } from '../utils/depsEqual';
type EffectHookType = typeof useEffect | typeof useLayoutEffect;
type CreateUpdateEffect = (hook: EffectHookType) => EffectHookType;
export const createDeepCompareEffect: CreateUpdateEffect = (hook) => (effect, deps) => {
const ref = useRef<DependencyList>(undefined);
const signalRef = useRef<number>(0);
if (deps === undefined || !depsEqual(deps, ref.current)) {
signalRef.current += 1;
}
ref.current = deps;
hook(effect, [signalRef.current]);
};import type { DependencyList } from 'react';
import isEqual from 'react-fast-compare';
export const depsEqual = (aDeps: DependencyList = [], bDeps: DependencyList = []) =>
isEqual(aDeps, bDeps);解读
关于 createDeepCompareEffect 的解读,可以查看对应文档:useDeepCompareEffect。
Last updated on