UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

37 lines (36 loc) 1.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var useOnUnmount_1 = tslib_1.__importDefault(require("./useOnUnmount")); var useInstance_1 = tslib_1.__importDefault(require("./useInstance")); function useThrottle(fn, ms, args) { if (ms === void 0) { ms = 200; } if (args === void 0) { args = []; } var _a = tslib_1.__read(useInstance_1.default({}), 1), state = _a[0]; react_1.useEffect(function () { if (state.timeout == null) { // first call fn.apply(void 0, tslib_1.__spread(args)); var timeoutCallback_1 = function () { if (state.hasNext) { state.hasNext = false; fn.apply(void 0, tslib_1.__spread(state.nextArgs)); state.timeout = window.setTimeout(timeoutCallback_1, ms); } else { state.timeout = undefined; } }; state.timeout = window.setTimeout(timeoutCallback_1, ms); } else { state.nextArgs = args; state.hasNext = true; } }, args); useOnUnmount_1.default(function () { clearTimeout(state.timeout); }); } exports.default = useThrottle;