(fn: () => void, delay?: number)
| 1 | import { useCallback, useEffect, useRef } from 'react'; |
| 2 | |
| 3 | const useTimeout = (fn: () => void, delay?: number) => { |
| 4 | |
| 5 | const fnRef = useRef<Function>(fn); |
| 6 | |
| 7 | fnRef.current = fn; |
| 8 | |
| 9 | const timerRef = useRef<number>(); |
| 10 | |
| 11 | const clear = useCallback(() => { |
| 12 | if (timerRef.current) { |
| 13 | clearTimeout(timerRef.current); |
| 14 | } |
| 15 | }, []); |
| 16 | |
| 17 | useEffect(() => { |
| 18 | timerRef.current = setTimeout(fnRef.current, delay); |
| 19 | |
| 20 | return clear; |
| 21 | }, [delay]); |
| 22 | |
| 23 | return clear; |
| 24 | }; |
| 25 | |
| 26 | export default useTimeout; |