react-use
Version:
Collection of React Hooks
36 lines (35 loc) • 1.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var useUnmount_1 = tslib_1.__importDefault(require("./useUnmount"));
var useThrottleFn = function (fn, ms, args) {
if (ms === void 0) { ms = 200; }
var _a = react_1.useState(null), state = _a[0], setState = _a[1];
var timeout = react_1.useRef();
var nextArgs = react_1.useRef();
react_1.useEffect(function () {
if (!timeout.current) {
setState(fn.apply(void 0, args));
var timeoutCallback_1 = function () {
if (nextArgs.current) {
setState(fn.apply(void 0, nextArgs.current));
nextArgs.current = undefined;
timeout.current = setTimeout(timeoutCallback_1, ms);
}
else {
timeout.current = undefined;
}
};
timeout.current = setTimeout(timeoutCallback_1, ms);
}
else {
nextArgs.current = args;
}
}, args);
useUnmount_1.default(function () {
timeout.current && clearTimeout(timeout.current);
});
return state;
};
exports.default = useThrottleFn;