mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2026-02-06 09:55:47 +00:00
33 lines
730 B
TypeScript
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 }
|
|
}
|