blob: 4d1ed477e33f419a052f41396cc7e168fa523780 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import { type MutableRefObject, useEffect, useRef } from 'react';
export type UseTimeoutCallback = () => void;
export type UseTimeoutId = string | number | NodeJS.Timeout | undefined;
/**
* React hook to schedule the execution of a one-time callback after delay.
*
* @param {UseTimeoutCallback} callback - The callback to schedule.
* @param {number} [delay] - A delay in ms.
* @returns {MutableRefObject<UseTimeoutId>} The timeout id.
*/
export const useTimeout = (
callback: UseTimeoutCallback,
delay = 0
): MutableRefObject<UseTimeoutId> => {
const idRef = useRef<UseTimeoutId>(undefined);
useEffect(() => {
idRef.current = setTimeout(() => callback(), delay);
return () => {
clearTimeout(idRef.current);
};
}, [callback, delay]);
return idRef;
};
|