@supunlakmal/hooks
Version:
A collection of reusable React hooks
26 lines • 1.04 kB
JavaScript
import { useMemo, useRef } from 'react';
export const basicDepsComparator = (prevDeps, nextDeps) => prevDeps.length === nextDeps.length &&
prevDeps.every((item, i) => item === nextDeps[i]);
/**
* Like `useMemo` but uses provided comparator function to validate dependency changes.
*
* @param factory Function calculating the value to be memoized.
* @param deps Dependency list like the one passed to `useMemo`.
* @param comparator Function that compares two dependency arrays,
* and returns `true` if they're equal.
*/
export const useCustomCompareMemo = (factory, deps, comparator = basicDepsComparator) => {
const dependencies = useRef(undefined);
const result = useRef(undefined);
return useMemo(() => {
if (dependencies.current === undefined ||
!comparator(dependencies.current, deps)) {
dependencies.current = deps;
return factory();
}
else {
return result.current;
}
}, deps);
};
//# sourceMappingURL=useCustomCompareMemo.js.map