react-elegant-ui
Version:
Elegant UI components, made by BEM best practices for react
30 lines (29 loc) • 947 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useEqualMemo = void 0;
var _react = require("react");
var _isEqual = require("../lib/isEqual");
var _usePrevious = require("./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
*/
var useEqualMemo = function (factory, deps) {
var value = (0, _react.useRef)();
var prevDeps = (0, _usePrevious.usePrevious)(deps, null);
// Check to return old value
if (deps !== undefined && prevDeps && (deps === prevDeps || deps.every(function (dep, idx) {
return (0, _isEqual.isEqual)(dep, prevDeps[idx]);
}))) {
return value.current;
}
// Make new value
var newValue = factory();
value.current = newValue;
return newValue;
};
exports.useEqualMemo = useEqualMemo;