@mindinventory/react-native-boilerplate
Version:
30 lines (22 loc) • 703 B
text/typescript
import { useEffect, useRef } from 'react';
type ClearTimerFn = (id: number | undefined) => void;
type RunTimerFn = (handler: () => void, timeout: number) => number;
const creteUseTimer =
(clear: ClearTimerFn, runTimer: RunTimerFn) =>
(callback: () => void, delay: number): void => {
const timerRef = useRef<number>();
useEffect(() => {
const stop = () => clear(timerRef.current);
stop();
timerRef.current = runTimer(callback, delay);
return stop;
}, [callback, delay]);
};
export const useInterval = creteUseTimer(
clearInterval as ClearTimerFn,
setInterval
);
export const useTimeout = creteUseTimer(
clearTimeout as ClearTimerFn,
setTimeout
);