/**
* Same as `React.useEffect` but uses a deep comparison on the dependency array. This should only
* be used when working with non-primitive dependencies.
*
* @param effect Effect callback to run
* @param deps Effect dependencies
*/
export function useDeepCompareEffect(effect: React.EffectCallback, deps: React.DependencyList) {
const ref = useRef<React.DependencyList>(deps)
// Only update the current dependencies if they are not deep equal
if (!isEqual(deps, ref.current)) {
ref.current = deps
}
// eslint-disable-next-line react-hooks/exhaustive-deps
return useEffect(effect, ref.current)
}
/**
* Same as `React.useEffect` but uses a deep comparison on the dependency array. This should only
* be used when working with non-primitive dependencies.
*
* @param effect Effect callback to run
* @param deps Effect dependencies
*/
export function useDeepCompareEffect(effect: React.EffectCallback, deps: React.DependencyList) {
const ref = useRef<React.DependencyList>(deps)
// Only update the current dependencies if they are not deep equal
if (!isEqual(deps, ref.current)) {
ref.current = deps
}
// eslint-disable-next-line react-hooks/exhaustive-deps
return useEffect(effect, ref.current)
}