useInterval.ts23 lines · main
1import { useEffect, useRef } from 'react'
2
3export function useInterval(callback: () => void, delay: number | false) {
4 const savedCallback = useRef(callback)
5
6 useEffect(() => {
7 savedCallback.current = callback
8 }, [callback])
9
10 useEffect(() => {
11 if (delay === false) {
12 return
13 }
14
15 const id = setInterval(() => {
16 savedCallback.current()
17 }, delay)
18
19 return () => {
20 clearInterval(id)
21 }
22 }, [delay])
23}