@vnmfify/core
Version:
```shell npm i @vnmfify/core -S ```
51 lines (43 loc) • 1.35 kB
JavaScript
import { useCallback, useMemo, useRef } from "react";
function useTimeout() {
var timerRef = useRef();
var cbRef = useRef();
var msRef = useRef();
var argsRef = useRef();
var stop = useCallback(() => {
if (timerRef.current) {
clearTimeout(timerRef.current);
timerRef.current = undefined;
}
}, []);
var start = useCallback(function (callback, ms) {
if (timerRef.current) {
return;
}
cbRef.current = callback;
msRef.current = ms;
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
argsRef.current = args;
timerRef.current = setTimeout(callback, ms, args);
}, []);
var restart = useCallback(function (callback, ms) {
stop();
if (callback) {
for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
args[_key2 - 2] = arguments[_key2];
}
start(callback, ms, args);
} else if (cbRef.current) {
start(cbRef.current, msRef.current, argsRef.current);
}
}, []);
return useMemo(() => ({
restart,
start,
stop
}), [restart, start, stop]);
}
export default useTimeout;
//# sourceMappingURL=use-timeout.js.map