34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var react_1 = require("react");
|
|
function useTimeoutFn(fn, ms) {
|
|
if (ms === void 0) { ms = 0; }
|
|
var ready = react_1.useRef(false);
|
|
var timeout = react_1.useRef();
|
|
var callback = react_1.useRef(fn);
|
|
var isReady = react_1.useCallback(function () { return ready.current; }, []);
|
|
var set = react_1.useCallback(function () {
|
|
ready.current = false;
|
|
timeout.current && clearTimeout(timeout.current);
|
|
timeout.current = setTimeout(function () {
|
|
ready.current = true;
|
|
callback.current();
|
|
}, ms);
|
|
}, [ms]);
|
|
var clear = react_1.useCallback(function () {
|
|
ready.current = null;
|
|
timeout.current && clearTimeout(timeout.current);
|
|
}, []);
|
|
// update ref when function changes
|
|
react_1.useEffect(function () {
|
|
callback.current = fn;
|
|
}, [fn]);
|
|
// set on mount, clear on unmount
|
|
react_1.useEffect(function () {
|
|
set();
|
|
return clear;
|
|
}, [ms]);
|
|
return [isReady, clear, set];
|
|
}
|
|
exports.default = useTimeoutFn;
|