UNPKG

wix-style-react

Version:
26 lines (22 loc) 1.05 kB
import { useCallback, useEffect, useRef } from 'react'; import _debounce from 'lodash/debounce'; /** A hook for creating a debounced callback function */ var useDebouncedCallback = function useDebouncedCallback( /** any function you want to debounce */ cb, /** dependencies your callback relies on. * Callback will be reevaluated when dependencies change - * (same as React's useCallback hook) */ dependencies) { var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200; var debounceFn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _debounce; var callbackRef = useRef(cb); // eslint-disable-next-line react-hooks/exhaustive-deps var debouncedCallback = useCallback(debounceFn(function () { callbackRef.current.apply(callbackRef, arguments); }, debounceMs), [debounceMs]); // update callback function when its dependencies change useEffect(function () { callbackRef.current = cb; }, [cb, dependencies]); return debouncedCallback; }; export default useDebouncedCallback;