lev-stake-sol/components/shared/useInterval.tsx

28 lines
633 B
TypeScript

import { useRef, useEffect } from 'react'
export default function useInterval(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
callback: (...args: any[]) => any,
delay: number,
) {
const savedCallback = useRef<() => void>()
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback
}, [callback])
// Set up the interval.
useEffect(() => {
function tick() {
savedCallback.current && savedCallback.current()
}
if (delay !== null) {
const id = setInterval(tick, delay)
return () => {
clearInterval(id)
}
}
}, [delay])
}