utopia-ui/lib/src/Components/Map/hooks/useTimeout.tsx
2025-12-18 22:28:48 +01:00

33 lines
730 B
TypeScript

import { useCallback, useEffect, useRef } from 'react'
export const useTimeout = (callback: () => void, delay: number) => {
const callbackRef = useRef(callback)
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)
useEffect(() => {
callbackRef.current = callback
}, [callback])
const set = useCallback(() => {
timeoutRef.current = setTimeout(() => {
callbackRef.current()
}, delay)
}, [delay])
const clear = useCallback(() => {
timeoutRef.current && clearTimeout(timeoutRef.current)
}, [])
useEffect(() => {
set()
return clear
}, [delay, set, clear])
const reset = useCallback(() => {
clear()
set()
}, [clear, set])
return { reset, clear }
}