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
- Entrada controlada com lista de sugestões
- Navegação pelo teclado em listas de sugestões
- Sugestões assíncronas com debounce
- Acessibilidade para componentes de preenchimento automático