call cb in useDeepEqualMemo only when needed

This commit is contained in:
nklhrstv 2020-10-16 17:09:24 +03:00
parent 5049cee10d
commit 21b1da7664

View file

@ -4,12 +4,16 @@ const React = require('react');
const isEqual = require('lodash.isequal');
const useDeepEqualMemo = (cb, deps) => {
const valueRef = React.useRef(cb());
const valueRef = React.useRef();
const mountedRef = React.useRef(false);
const prevDepsRef = React.useRef(deps);
if (!isEqual(prevDepsRef.current, deps)) {
if (!mountedRef.current || !isEqual(prevDepsRef.current, deps)) {
valueRef.current = cb();
prevDepsRef.current = deps;
}
React.useLayoutEffect(() => {
mountedRef.current = true;
}, []);
return valueRef.current;
};