ahooks
Version:
react hooks library
22 lines (21 loc) • 636 B
JavaScript
import { useCallback, useEffect, useRef } from 'react';
import useMemoizedFn from '../useMemoizedFn';
import { isNumber } from '../utils';
const useTimeout = (fn, delay) => {
const timerCallback = useMemoizedFn(fn);
const timerRef = useRef(null);
const clear = useCallback(() => {
if (timerRef.current) {
clearTimeout(timerRef.current);
}
}, []);
useEffect(() => {
if (!isNumber(delay) || delay < 0) {
return;
}
timerRef.current = setTimeout(timerCallback, delay);
return clear;
}, [delay]);
return clear;
};
export default useTimeout;