@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
45 lines (44 loc) • 1.14 kB
JavaScript
"use client";
let react = require("react");
//#region packages/@mantine/hooks/src/use-interval/use-interval.ts
function useInterval(fn, interval, { autoInvoke = false } = {}) {
const [active, setActive] = (0, react.useState)(false);
const intervalRef = (0, react.useRef)(null);
const fnRef = (0, react.useRef)(null);
const start = (0, react.useCallback)(() => {
setActive((old) => {
if (!old && (!intervalRef.current || intervalRef.current === -1)) intervalRef.current = window.setInterval(fnRef.current, interval);
return true;
});
}, []);
const stop = (0, react.useCallback)(() => {
setActive(false);
window.clearInterval(intervalRef.current || -1);
intervalRef.current = -1;
}, []);
const toggle = (0, react.useCallback)(() => {
if (active) stop();
else start();
}, [active]);
(0, react.useEffect)(() => {
fnRef.current = fn;
active && start();
return stop;
}, [
fn,
active,
interval
]);
(0, react.useEffect)(() => {
if (autoInvoke) start();
}, []);
return {
start,
stop,
toggle,
active
};
}
//#endregion
exports.useInterval = useInterval;
//# sourceMappingURL=use-interval.cjs.map