video-flow-b/hooks/useDeepCompareEffect.ts

20 lines
479 B
TypeScript

import { useEffect, useRef } from 'react';
import isEqual from 'lodash/isEqual';
function useDeepCompareMemoize<T>(value: T) {
const ref = useRef<T>();
if (!isEqual(value, ref.current)) {
ref.current = value;
}
return ref.current;
}
export function useDeepCompareEffect(
callback: () => void | (() => void),
dependencies: any[]
) {
// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(callback, dependencies.map(useDeepCompareMemoize));
}