UNPKG

use-deep-compare-effect

Version:

It's react's useEffect hook, except using deep comparison on the inputs, not reference equality

42 lines (31 loc) 1.08 kB
import React from 'react'; import deepEqual from 'dequal'; function checkDeps(deps) { if (!deps || !deps.length) { throw new Error('useDeepCompareEffect should not be used with no dependencies. Use React.useEffect instead.'); } if (deps.every(isPrimitive)) { throw new Error('useDeepCompareEffect should not be used with dependencies that are all primitive values. Use React.useEffect instead.'); } } function isPrimitive(val) { return val == null || /^[sbn]/.test(typeof val); } function useDeepCompareMemoize(value) { var ref = React.useRef(); if (!deepEqual(value, ref.current)) { ref.current = value; } return ref.current; } function useDeepCompareEffect(callback, dependencies) { if (process.env.NODE_ENV !== 'production') { checkDeps(dependencies); } React.useEffect(callback, useDeepCompareMemoize(dependencies)); } function useDeepCompareEffectNoCheck(callback, dependencies) { React.useEffect(callback, useDeepCompareMemoize(dependencies)); } export default useDeepCompareEffect; export { useDeepCompareEffectNoCheck };