Docs PessoaisMeus estudos
  • Início
    • JavaScript
    • React
    • Next.js
    • Utilitários
    • Componentes
    • Hooks
    • Portfólio
    • README Generator
    • QRcode Generator
    • Todas as Reflexões
    • Carreira
    • Bem-estar
    • Arquitetura Frontend Moderna
Última atualização: 18/08/2025

Command Palette

Search for a command to run...

  1. Início
  2. Snippets
  3. Utilitarios
  4. Debounce hook

useDebounce Hook

Hook personalizado para debounce de valores e otimização de performance.

useDebounce Hook

Hook que atrasa a atualização de um valor até que pare de mudar por um período específico

Valor atual: ""

Valor com debounce: ""

Como Funciona

O hook useDebounce atrasa a atualização de um valor até que ele pare de mudar por um período específico (delay). Isso é útil para:

  • Busca em tempo real sem sobrecarregar a API
  • Validação de formulários
  • Redimensionamento de janela
  • Qualquer evento que dispara frequentemente

Código Completo

import { useState, useEffect } from 'react';

function useDebounce<T>(value: T, delay: number): T {
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    // Cleanup function que cancela o timeout anterior
    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);

  return debouncedValue;
}

export default useDebounce;

Variações

useDebounceCallback

import { useCallback, useRef } from 'react';

function useDebounceCallback<T extends (...args: any[]) => any>(
  callback: T,
  delay: number
): T {
  const timeoutRef = useRef<NodeJS.Timeout>();

  return useCallback(
    ((...args: Parameters<T>) => {
      clearTimeout(timeoutRef.current);
      timeoutRef.current = setTimeout(() => {
        callback(...args);
      }, delay);
    }) as T,
    [callback, delay]
  );
}