UNPKG

@supunlakmal/hooks

Version:

A collection of reusable React hooks

26 lines 1.04 kB
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