rc-hooks
Version:
React Hooks Library.
41 lines (40 loc) • 1.5 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var ut2_1 = require("ut2");
var useUnmount_1 = tslib_1.__importDefault(require("../useUnmount"));
var useLatest_1 = tslib_1.__importDefault(require("../useLatest"));
/**
* 用来处理防抖函数的 Hook。
*
* @param {Function} fn 需要防抖的函数。
* @param {number} [wait=0] 防抖等待时间,单位为毫秒。默认 `0`。
* @param {boolean} [immediate=false] 是否在延迟开始前调用。默认 `false`。
* @returns
* @example
* const [value, setValue] = useState(0);
* // 频繁调用 run,但只会在所有调用完成 500ms 后执行一次函数
* const { run } = useDebounceFn(setValue, 500);
*/
function useDebounceFn(fn, wait, immediate) {
if (wait === void 0) { wait = 0; }
if (immediate === void 0) { immediate = false; }
var fnRef = (0, useLatest_1.default)(fn);
var debounceRun = (0, react_1.useRef)((0, ut2_1.debounce)(function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return fnRef.current.apply(void 0, args);
}, wait, immediate));
(0, useUnmount_1.default)(function () {
debounceRun.current.cancel();
});
return {
run: debounceRun.current,
cancel: debounceRun.current.cancel,
flush: debounceRun.current.flush
};
}
exports.default = useDebounceFn;
;