react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
23 lines • 763 B
JavaScript
import { useRef } from 'react';
import { isEqual } from '../lib/isEqual';
import { usePrevious } from './usePrevious';
/**
* It work like standard `useMemo`, but deep compare deps to equal
*
* It useful when you every time create new object (for example use destructuring),
* but you wish recalculate something only with real changes
*/
export var useEqualMemo = function (factory, deps) {
var value = useRef();
var prevDeps = usePrevious(deps, null);
// Check to return old value
if (deps !== undefined && prevDeps && (deps === prevDeps || deps.every(function (dep, idx) {
return isEqual(dep, prevDeps[idx]);
}))) {
return value.current;
}
// Make new value
var newValue = factory();
value.current = newValue;
return newValue;
};