0Pricing
React Academy · Aula

Sugestões assíncronas com debounce

Busque sugestões em uma API enquanto o usuário digita, aplicando debounce para evitar requisições de rede excessivas.

Sugestões assíncronas com debounce é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Substituindo o filtro estático por uma busca na API

Em vez de filtrar uma matriz local, chame um ponto de acesso da API que retorne sugestões correspondentes com base na consulta. A chamada à API fica em um useEffect que depende do valor de entrada com atraso. Isso transfere a responsabilidade pela filtragem para o servidor, permitindo correspondência aproximada, classificação e sugestões de um conjunto de dados muito maior.

Novo estado para carregamento e erro

Adicione duas novas variáveis de estado ao preenchimento automático: isLoading (booleano) para exibir um indicador enquanto a busca estiver em andamento e error (cadeia de caracteres ou nulo) para exibir uma mensagem de erro quando a busca falhar. Isso fornece informações sobre a operação assíncrona, em vez de deixar os usuários se perguntando por que as sugestões não aparecem.

O efeito de busca

No useEffect de busca, defina setIsLoading(true) e setError(null) no início; depois, chame fetch(url), analise o JSON, chame setSuggestions(data) e, por fim, defina setIsLoading(false) em um bloco de finalização ou depois dos caminhos de sucesso e erro. A matriz de dependências do efeito contém apenas debouncedInputValue.

Usando AbortController para cancelar requisições

Crie um novo AbortController no início do efeito e passe controller.signal para as opções da busca. Na função de limpeza, chame controller.abort(). Quando o usuário digita e o valor com atraso muda, a busca anterior é cancelada antes que a nova comece, impedindo que resultados obsoletos cheguem fora de ordem.

Tratando erros de cancelamento

Quando uma busca é cancelada, ela é rejeitada com uma DOMException cujo nome é AbortError. No bloco de captura, verifique if (err.name === 'AbortError') return; para ignorar silenciosamente as buscas canceladas. Trate somente erros reais de rede ou erros da API que devem ser mostrados ao usuário.

Gerenciamento do estado isLoading

Defina isLoading como true antes da busca e como false depois que ela for resolvida ou rejeitada. Use um bloco de finalização para garantir que ele seja sempre redefinido: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Sem o bloco de finalização, um erro da busca deixaria o indicador em execução para sempre.

Indicador de carregamento na lista suspensa

Quando isLoading for verdadeiro e a entrada contiver texto, mostre a lista suspensa com um indicador centralizado dentro dela, em vez da lista de sugestões. Isso informa ao usuário que os resultados estão a caminho. Quando o carregamento for falso e as sugestões tiverem chegado, substitua o indicador pelos itens reais de sugestão.

Estado de erro na lista suspensa

Quando error não for nulo, mostre a lista suspensa com a mensagem de erro em vez das sugestões. Uma mensagem como "Não foi possível carregar as sugestões. Tente novamente." é mais amigável do que uma cadeia de erro bruta. Opcionalmente, adicione um botão de nova tentativa que dispare a busca manualmente.

Limite mínimo de caracteres

Evite fazer buscas para cadeias vazias ou consultas muito curtas que produzam resultados irrelevantes demais. Faça essa verificação no início do efeito: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. Isso reduz chamadas desnecessárias à API e impede uma lista excessiva de resultados a partir de um único caractere.

Armazenando resultados obtidos

Armazene os resultados obtidos em um Map dentro de uma useRef: const cache = useRef(new Map()). Antes de fazer a busca, verifique if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Depois de uma busca bem-sucedida, armazene o resultado. Isso elimina requisições de rede redundantes para consultas que o usuário já digitou.

Atraso recomendado para o preenchimento automático

Para o preenchimento automático especificamente, um atraso de 200 a 300 ms é o ponto ideal. Atrasos menores (inferiores a 200 ms) disparam solicitações demais para pessoas que digitam rápido. Atrasos maiores (superiores a 400 ms) fazem as sugestões parecerem lentas e sem resposta. 250 ms é um padrão usado com frequência em implementações de preenchimento automático em produção.

AbortController no preenchimento automático

Por que AbortController é importante em um preenchimento automático com atraso que faz buscas em uma API?

Recapitulação da lição: sugestões assíncronas com atraso

Substitua a filtragem estática por uma busca na API dentro de um useEffect que dependa do valor com atraso. Use AbortController para cancelar requisições obsoletas. Adicione o estado isLoading e error para fornecer informações ao usuário. Defina um limite mínimo de caracteres para evitar chamadas excessivas. Armazene os resultados em uma referência para ignorar requisições de rede redundantes.

Perguntas Frequentes

A aula “Sugestões assíncronas com debounce” é grátis?

Sim — o texto completo de “Sugestões assíncronas com debounce” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Sugestões assíncronas com debounce”?

Busque sugestões em uma API enquanto o usuário digita, aplicando debounce para evitar requisições de rede excessivas. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Sugestões assíncronas com debounce”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Entrada controlada com lista de sugestões
  2. Navegação pelo teclado em listas de sugestões
  3. Sugestões assíncronas com debounce
  4. Acessibilidade para componentes de preenchimento automático
← Voltar para React Academy