@arco-design/web-react
Version:
Arco Design React UI Library.
30 lines (29 loc) • 882 B
JavaScript
import { useRef, useEffect } from 'react';
export function useInterval(callback, delay) {
var refIntervalId = useRef(null);
var refSavedCallback = useRef();
var setUpInterval = function () {
if (delay !== null) {
refIntervalId.current = setInterval(function () {
refSavedCallback.current();
}, delay);
}
};
var cleanUpInterval = function () {
refIntervalId.current && clearInterval(refIntervalId.current);
};
var resetInterval = function () {
cleanUpInterval();
setUpInterval();
};
// Remember the latest function.
useEffect(function () {
refSavedCallback.current = callback;
}, [callback]);
// Set up the interval.
useEffect(function () {
setUpInterval();
return cleanUpInterval;
}, [delay]);
return resetInterval;
}