UNPKG

rc-hooks

Version:
41 lines (40 loc) 1.5 kB
"use strict"; 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;