use-lodash-debounce-throttle
Version:
Bring debounce & throttle of lodash version to react-hooks
47 lines (38 loc) • 1.26 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = require("react");
var _useStableMemo = _interopRequireDefault(require("./use-stable-memo"));
function createCancelableHook(createFn, depFn) {
return function (fn, wait, options, deps) {
var compareParams = depFn(wait, options).concat(deps || []);
var debouncedFn = (0, _react.useRef)(undefined);
var fnRef = (0, _react.useRef)(fn);
fnRef.current = fn;
function createDebounce() {
return createFn(function () {
return fnRef.current && fnRef.current.apply(fnRef, arguments);
}, wait, options);
}
(0, _useStableMemo["default"])(function () {
if (debouncedFn.current) {
// only call when update
debouncedFn.current.cancel();
}
debouncedFn.current = createDebounce();
}, compareParams);
(0, _react.useEffect)(function () {
return function () {
if (debouncedFn.current) {
debouncedFn.current.cancel();
}
};
}, []);
return debouncedFn.current;
};
}
var _default = createCancelableHook;
exports["default"] = _default;