wix-style-react
Version:
26 lines (22 loc) • 1.05 kB
JavaScript
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;