@gdjiami/hooks
Version:
react hooks for mygzb.com
37 lines (36 loc) • 1.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var useInstance_1 = tslib_1.__importDefault(require("./useInstance"));
function useTimeout(options) {
if (options === void 0) { options = {}; }
var _a = tslib_1.__read(react_1.useState(false), 2), ready = _a[0], setReady = _a[1];
var _b = tslib_1.__read(useInstance_1.default({}), 1), state = _b[0];
var start = react_1.useCallback(function () {
if (state.unmounted) {
return;
}
setReady(false);
window.clearTimeout(state.timer);
state.timer = window.setTimeout(function () {
setReady(true);
options.callback && options.callback();
}, options.duration);
}, [options.callback, options.duration]);
var stop = react_1.useCallback(function () {
setReady(false);
window.clearTimeout(state.timer);
}, []);
react_1.useEffect(function () {
if (options.startOnMount) {
start();
}
return function () {
window.clearTimeout(state.timer);
state.unmounted = true;
};
}, []);
return { start: start, stop: stop, ready: ready };
}
exports.default = useTimeout;