phanpy/src/utils/useInterval.js
2023-02-08 19:11:33 +08:00

26 lines
610 B
JavaScript

import { useEffect, useRef } from 'preact/hooks';
const noop = () => {};
function useInterval(callback, delay, immediate) {
const savedCallback = useRef(noop);
useEffect(() => {
savedCallback.current = callback;
}, []);
useEffect(() => {
if (!immediate || delay === null || delay === false) return;
savedCallback.current();
}, [immediate]);
useEffect(() => {
if (delay === null || delay === false) return;
const tick = () => savedCallback.current();
const id = setInterval(tick, delay);
return () => clearInterval(id);
}, [delay]);
}
export default useInterval;