wix-style-react
Version:
37 lines (29 loc) • 1.33 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = require("react");
var _debounce2 = _interopRequireDefault(require("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] : _debounce2["default"];
var callbackRef = (0, _react.useRef)(cb); // eslint-disable-next-line react-hooks/exhaustive-deps
var debouncedCallback = (0, _react.useCallback)(debounceFn(function () {
callbackRef.current.apply(callbackRef, arguments);
}, debounceMs), [debounceMs]); // update callback function when its dependencies change
(0, _react.useEffect)(function () {
callbackRef.current = cb;
}, [cb, dependencies]);
return debouncedCallback;
};
var _default = useDebouncedCallback;
exports["default"] = _default;