UNPKG

preact-arco-design

Version:

Arco Design React UI Library.

33 lines (27 loc) 850 B
import { useRef, useEffect } from "preact/compat"; export function useInterval(callback, delay) { var refIntervalId = useRef(null); var refSavedCallback = useRef(); var setUpInterval = function setUpInterval() { if (delay !== null) { refIntervalId.current = setInterval(function () { refSavedCallback.current(); }, delay); } }; var cleanUpInterval = function cleanUpInterval() { refIntervalId.current && clearInterval(refIntervalId.current); }; var resetInterval = function resetInterval() { cleanUpInterval(); setUpInterval(); }; // Remember the latest function. useEffect(function () { refSavedCallback.current = callback; }, [callback]); // Set up the interval. useEffect(function () { setUpInterval(); return cleanUpInterval; }, [delay]); return resetInterval; }