@react-hookz/web
Version:
React hooks done right, for browser and SSR.
18 lines (17 loc) • 667 B
JavaScript
import { useMemo, useRef } from 'react';
/**
* Like useMemo but uses provided comparator function to validate dependency changes.
*
* @param factory useMemo factory function
* @param deps useMemo dependency list
* @param comparator function to validate dependency changes
* @returns useMemo result
*/
export const useCustomCompareMemo = (factory, deps, comparator) => {
const dependencies = useRef(undefined);
if (dependencies.current === undefined || !comparator(dependencies.current, deps)) {
dependencies.current = deps;
}
// eslint-disable-next-line react-hooks/exhaustive-deps
return useMemo(factory, dependencies.current);
};