0Pricing
React Academy · Aula

Navegação pelo teclado em listas de sugestões

Gerencie as teclas ArrowUp, ArrowDown, Enter e Escape para navegar e selecionar sugestões sem usar o mouse.

Navegação pelo teclado em listas de sugestões é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 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.

Tratando onKeyDown no campo de entrada

Anexe o manipulador de teclado ao evento onKeyDown no elemento de entrada, não a onKeyPress (obsoleto) nem a onKeyUp. keyDown é acionado antes que o caractere apareça no campo de entrada, o que permite interceptar ArrowDown, ArrowUp, Enter e Escape antes que tenham qualquer efeito padrão do navegador.

Comportamento da tecla ArrowDown

Quando o usuário pressiona ArrowDown, incremente selectedIndex em 1, limitado ao máximo de suggestions.length - 1: setSelectedIndex(prev => Math.min(prev + 1, suggestions.length - 1)). Também chame e.preventDefault() para impedir que o cursor pule para o fim do texto do campo de entrada, que é o comportamento padrão do navegador para ArrowDown em campos de texto.

Comportamento da tecla ArrowUp

Quando o usuário pressiona ArrowUp, decremente selectedIndex em 1, limitado ao mínimo de 0: setSelectedIndex(prev => Math.max(prev - 1, 0)). Você também pode limitar o valor a -1 (nenhuma seleção) ao ultrapassar o índice 0, permitindo que o usuário remova a seleção e volte a digitar livremente.

Comportamento da tecla Enter

Quando Enter for pressionado e selectedIndex >= 0, selecione a sugestão destacada: defina inputValue como suggestions[selectedIndex], feche a lista suspensa e redefina selectedIndex para -1. Se nenhuma sugestão estiver destacada (selectedIndex for -1), permita que o envio normal do formulário ou a ação de pesquisa continue.

Comportamento da tecla Escape

Quando Escape for pressionada, feche a lista suspensa definindo isOpen como false e redefina selectedIndex para -1. Não limpe o valor do campo de entrada — o usuário só quer dispensar as sugestões sem selecionar uma, mantendo o texto digitado para continuar editando.

Comportamento da tecla Tab

Quando Tab for pressionada, feche a lista suspensa, pois o navegador moverá o foco para o próximo elemento que possa recebê-lo. Definir isOpen como false ao pressionar Tab garante que a lista suspensa não permaneça aberta depois que o foco sair do campo de entrada. Não é necessário chamar preventDefault() — deixe o navegador cuidar da ordem natural de tabulação.

Destaque visual da linha selecionada

A sugestão destacada deve ser visualmente distinta. Aplique um estilo ativo à sugestão em selectedIndex: className={index === selectedIndex ? 'suggestion suggestion--active' : 'suggestion'}. O estado ativo normalmente usa uma mudança na cor de fundo, deixando claro qual item será selecionado se Enter for pressionada.

Rolando o item selecionado até a área visível

Quando a lista de sugestões tem uma altura máxima e permite rolagem, o item destacado pode sair da tela durante a navegação pelo teclado. Use uma matriz de referências para armazenar os elementos DOM das sugestões e chame listItemRefs.current[selectedIndex]?.scrollIntoView({ block: 'nearest' }) sempre que selectedIndex mudar. O valor de bloco nearest minimiza a quantidade de rolagem.

Sincronizando selectedIndex quando as sugestões mudam

Quando o campo de entrada mudar e uma nova lista filtrada aparecer, redefina selectedIndex para -1 na mesma atualização de estado ou em um useEffect que dependa das sugestões. Índices desatualizados apontando para itens removidos fariam o usuário selecionar a sugestão errada.

Fluxo completo de navegação pelo teclado

O fluxo completo do usuário é: digitar para filtrar, ArrowDown destacar o primeiro item, mais pressões de ArrowDown percorrerem a lista, ArrowUp voltar na lista, Enter selecionar o item destacado e Escape dispensar as sugestões sem selecionar. Isso abrange todos os padrões comuns de interação pelo teclado esperados pelos usuários de um campo de preenchimento automático.

Impedindo o comportamento padrão das teclas de seta

Sempre chame e.preventDefault() ao tratar ArrowDown e ArrowUp dentro de um campo de texto. Sem isso, ArrowDown move o cursor de texto para o fim, e ArrowUp o move para o início. Esses movimentos do cursor entrariam em conflito com a navegação pelo índice selecionado, criando um comportamento confuso.

Mapeamento das teclas de navegação

O que deve acontecer quando o usuário pressiona Enter com uma sugestão destacada em selectedIndex = 2?

Recapitulação da lição: Navegação pelo teclado

Gerencie onKeyDown na entrada. ArrowDown incrementa selectedIndex (limitado ao máximo), ArrowUp decrementa (limitado a 0 ou -1), a tecla de confirmação seleciona o item destacado, a tecla de escape fecha sem selecionar e a tecla de tabulação fecha e permite que o navegador mova o foco. Sempre chame preventDefault nas teclas de seta e role o item destacado para que fique visível.

Perguntas Frequentes

A aula “Navegação pelo teclado em listas de sugestões” é grátis?

Sim — o texto completo de “Navegação pelo teclado em listas de sugestões” é 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 “Navegação pelo teclado em listas de sugestões”?

Gerencie as teclas ArrowUp, ArrowDown, Enter e Escape para navegar e selecionar sugestões sem usar o mouse. 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 2 de 4.

Quanto tempo leva a aula “Navegação pelo teclado em listas de sugestões”?

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