mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
30 lines
674 B
TypeScript
30 lines
674 B
TypeScript
import { useCallback, useEffect, useRef } from 'react';
|
|
|
|
export const useTimeout = (callback, delay) => {
|
|
const callbackRef = useRef(callback);
|
|
const timeoutRef = useRef<any>();
|
|
|
|
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 };
|
|
} |