wix-style-react
Version:
wix-style-react
29 lines (28 loc) • 1.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = 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(...arguments);
}, debounceMs), [debounceMs]);
// update callback function when its dependencies change
(0, _react.useEffect)(() => {
callbackRef.current = cb;
}, [cb, dependencies]);
return debouncedCallback;
};
var _default = exports.default = useDebouncedCallback;
//# sourceMappingURL=useDebouncedCallback.js.map