React Academy · Leçon

Navigation au clavier dans les listes de suggestions

Gérez les touches ArrowUp, ArrowDown, Enter et Escape pour parcourir et sélectionner des suggestions sans souris

Leçon 2 sur 413 étapes

Navigation au clavier dans les listes de suggestions est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Gérer onKeyDown sur le champ de saisie

Associez le gestionnaire de clavier à l’événement onKeyDown de l’élément de saisie, et non à onKeyPress, qui est obsolète, ni à onKeyUp. keyDown se déclenche avant que le caractère n’apparaisse dans le champ, ce qui vous permet d’intercepter ArrowDown, ArrowUp, Entrée et Échap avant qu’ils n’aient un effet par défaut dans le navigateur.

Comportement de la touche ArrowDown

Lorsque l’utilisateur appuie sur ArrowDown, incrémentez selectedIndex de 1, en le limitant à une valeur maximale de suggestions.length - 1 : setSelectedIndex(prev => Math.min(prev + 1, suggestions.length - 1)). Appelez également e.preventDefault() pour empêcher le curseur de se déplacer à la fin du texte saisi, ce qui est le comportement par défaut du navigateur pour ArrowDown dans les champs de texte.

Comportement de la touche ArrowUp

Lorsque l’utilisateur appuie sur ArrowUp, décrémentez selectedIndex de 1, en le limitant à une valeur minimale de 0 : setSelectedIndex(prev => Math.max(prev - 1, 0)). Vous pouvez également choisir de le limiter à -1, pour indiquer l’absence de sélection, lorsque l’utilisateur remonte au-delà de l’indice 0. Cela permet de désélectionner une suggestion et de reprendre librement la saisie.

Comportement de la touche Entrée

Lorsque la touche Entrée est pressée et que selectedIndex >= 0, sélectionnez la suggestion mise en évidence : définissez inputValue sur suggestions[selectedIndex], fermez la liste déroulante et réinitialisez selectedIndex à -1. Si aucune suggestion n’est mise en évidence, c’est-à-dire si selectedIndex vaut -1, autorisez l’envoi normal du formulaire ou l’action de recherche à se poursuivre.

Comportement de la touche Échap

Lorsque la touche Échap est pressée, fermez la liste déroulante en définissant isOpen sur false et réinitialisez selectedIndex sur -1. N’effacez pas la valeur du champ : l’utilisateur souhaite simplement masquer les suggestions sans en sélectionner une, tout en conservant le texte saisi pour le modifier.

Comportement de la touche Tabulation

Lorsque la touche Tabulation est pressée, fermez la liste déroulante, car le navigateur déplacera de toute façon le focus vers l’élément suivant pouvant le recevoir. Définir isOpen sur false lors de l’appui sur Tab garantit que la liste déroulante ne reste pas ouverte après que le focus a quitté le champ. Vous n’avez pas besoin d’appeler preventDefault() : laissez le navigateur gérer l’ordre naturel de tabulation.

Mise en évidence visuelle de la ligne sélectionnée

La suggestion mise en évidence doit être visuellement distincte. Appliquez un style actif à la suggestion située à l’indice selectedIndex : className={index === selectedIndex ? 'suggestion suggestion--active' : 'suggestion'}. L’état actif utilise généralement un changement de couleur d’arrière-plan, ce qui indique clairement quel élément sera sélectionné si l’utilisateur appuie sur Entrée.

Afficher l’élément sélectionné par défilement

Lorsque la liste de suggestions possède une hauteur maximale et défile, l’élément mis en évidence peut sortir de l’écran pendant la navigation au clavier. Utilisez un tableau de références pour stocker les éléments DOM des suggestions et appelez listItemRefs.current[selectedIndex]?.scrollIntoView({ block: 'nearest' }) chaque fois que selectedIndex change. La valeur de bloc nearest réduit au minimum la quantité de défilement.

Synchroniser selectedIndex lorsque les suggestions changent

Lorsque le champ change et qu’une nouvelle liste filtrée apparaît, réinitialisez selectedIndex à -1 dans la même mise à jour d’état ou dans un useEffect qui dépend des suggestions. Des indices obsolètes pointant vers des éléments supprimés amèneraient l’utilisateur à sélectionner la mauvaise suggestion.

Parcours complet de la navigation au clavier

Le parcours complet est le suivant : l’utilisateur saisit du texte pour filtrer, ArrowDown met en évidence le premier élément, d’autres pressions sur ArrowDown permettent de parcourir la liste, ArrowUp permet de remonter, Entrée sélectionne l’élément mis en évidence et Échap ferme la liste sans sélectionner. Cela couvre tous les schémas d’interaction au clavier habituels attendus dans un champ de saisie semi-automatique.

Empêcher le comportement par défaut des touches fléchées

Appelez toujours e.preventDefault() lorsque vous gérez ArrowDown et ArrowUp dans un champ de texte. Sinon, ArrowDown déplace le curseur de texte à la fin et ArrowUp le déplace au début. Ces déplacements du curseur entreraient en conflit avec la navigation fondée sur selectedIndex et créeraient un comportement déroutant.

Correspondance des touches de navigation au clavier

Que doit-il se passer lorsque l’utilisateur appuie sur la touche Entrée alors qu’une suggestion est mise en évidence à selectedIndex = 2 ?

Récapitulatif de la leçon : navigation au clavier

Gérez onKeyDown sur le champ de saisie. ArrowDown incrémente selectedIndex, dans la limite de la valeur maximale, et ArrowUp le décrémente, dans la limite de 0 ou -1. La touche Entrée sélectionne l’élément mis en évidence, Échap ferme la liste sans effectuer de sélection, et Tab la ferme tout en laissant le navigateur déplacer le focus. Appelez toujours preventDefault pour les touches fléchées et faites défiler l’élément mis en évidence jusqu’à ce qu’il soit visible.

Gratuit pour commencer

Apprends React avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
88
Leçons
324

Questions Fréquemment Posées

La leçon « Navigation au clavier dans les listes de suggestions » est-elle gratuite ?

Oui — le texte complet de « Navigation au clavier dans les listes de suggestions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Navigation au clavier dans les listes de suggestions » ?

Gérez les touches ArrowUp, ArrowDown, Enter et Escape pour parcourir et sélectionner des suggestions sans souris Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Navigation au clavier dans les listes de suggestions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Entrée contrôlée avec liste de suggestions
  2. Navigation au clavier dans les listes de suggestions
  3. Suggestions asynchrones avec debounce
  4. Accessibilité des composants de saisie automatique
← Retour à React Academy