@gdjiami/hooks
Version:
react hooks for mygzb.com
37 lines (36 loc) • 1.37 kB
JavaScript
;
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;