typescriptbeginner

useTimeout Hook

Declarative setTimeout hook with automatic cleanup and reset capabilities.

typescript
import { useEffect, useRef, useCallback } from 'react';

export function useTimeout(callback: () => void, delay: number | null) {
  const savedCallback = useRef(callback);
  const timerRef = useRef<ReturnType<typeof setTimeout>>();

  useEffect(() => {
    savedCallback.current = callback;
  }, [callback]);

  const reset = useCallback(() => {
    if (timerRef.current) clearTimeout(timerRef.current);
    if (delay !== null) {
      timerRef.current = setTimeout(() => savedCallback.current(), delay);
    }
  }, [delay]);

  useEffect(() => {
    reset();
    return () => { if (timerRef.current) clearTimeout(timerRef.current); };
  }, [reset]);

  return { reset };
}

Use Cases

  • Auto-dismiss notifications
  • Delayed actions

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.