in packages/hooks/src/useRafTimeout/index.ts [45:64]
function useRafTimeout(fn: () => void, delay: number | undefined) {
const fnRef = useLatest(fn);
const timerRef = useRef<Handle>();
const clear = useCallback(() => {
if (timerRef.current) {
clearRafTimeout(timerRef.current);
}
}, []);
useEffect(() => {
if (!isNumber(delay) || delay < 0) return;
timerRef.current = setRafTimeout(() => {
fnRef.current();
}, delay);
return clear;
}, [delay]);
return clear;
}