UNPKG

use-deep-compare-effect

Version:

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

48 lines (34 loc) 1.35 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = _interopDefault(require('react')); var deepEqual = _interopDefault(require('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)); } exports.useDeepCompareEffectNoCheck = useDeepCompareEffectNoCheck; exports.default = useDeepCompareEffect;