0Pricing
React Academy · Lekcja

Nawigacja klawiaturą po listach sugestii

Obsługiwać klawisze ArrowUp, ArrowDown, Enter i Escape, aby nawigować po sugestiach i wybierać je bez myszy

Nawigacja klawiaturą po listach sugestii to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Obsługa onKeyDown w polu tekstowym

Handler klawiatury należy podłączyć do zdarzenia onKeyDown elementu pola tekstowego, a nie do onKeyPress (przestarzałego) ani onKeyUp. keyDown jest wywoływane przed pojawieniem się znaku w polu, co pozwala przechwycić klawisze ArrowDown, ArrowUp, Enter i Escape, zanim zadziała ich domyślne działanie w przeglądarce.

Działanie klawisza ArrowDown

Po naciśnięciu przez użytkownika klawisza ArrowDown należy zwiększyć selectedIndex o 1, ograniczając go do maksymalnej wartości suggestions.length - 1: setSelectedIndex(prev => Math.min(prev + 1, suggestions.length - 1)). Należy również wywołać e.preventDefault(), aby zapobiec przeniesieniu kursora na koniec tekstu w polu, co jest domyślnym działaniem przeglądarki dla klawisza ArrowDown w polach tekstowych.

Działanie klawisza ArrowUp

Po naciśnięciu przez użytkownika klawisza ArrowUp należy zmniejszyć selectedIndex o 1, ograniczając go do minimalnej wartości 0: setSelectedIndex(prev => Math.max(prev - 1, 0)). Można również ustawić ograniczenie do wartości -1 (brak zaznaczenia) przy przejściu powyżej indeksu 0, umożliwiając użytkownikowi usunięcie zaznaczenia i swobodny powrót do pisania.

Działanie klawisza Enter

Gdy zostanie naciśnięty klawisz Enter, a selectedIndex >= 0, należy wybrać wyróżnioną sugestię: ustawić inputValue na suggestions[selectedIndex], zamknąć listę rozwijaną i zresetować selectedIndex do wartości -1. Jeśli żadna sugestia nie jest wyróżniona (selectedIndex ma wartość -1), należy pozwolić na kontynuowanie standardowego wysłania formularza lub wyszukiwania.

Działanie klawisza Escape

Po naciśnięciu klawisza Escape należy zamknąć listę rozwijaną, ustawiając isOpen na false, oraz zresetować selectedIndex do -1. Nie należy usuwać wartości pola tekstowego — użytkownik chce jedynie zamknąć sugestie bez wybierania elementu, zachowując wpisany tekst do dalszej edycji.

Działanie klawisza Tab

Po naciśnięciu klawisza Tab należy zamknąć listę rozwijaną, ponieważ przeglądarka i tak przeniesie fokus na następny element interaktywny. Ustawienie isOpen na false po naciśnięciu Tab gwarantuje, że lista nie pozostanie otwarta po opuszczeniu pola tekstowego. Nie trzeba wywoływać preventDefault() — należy pozwolić przeglądarce obsłużyć naturalną kolejność przechodzenia klawiszem Tab.

Wizualne wyróżnienie wybranego wiersza

Wyróżniona sugestia musi być wyraźnie odróżnialna wizualnie. Należy zastosować styl aktywny do sugestii o indeksie selectedIndex: className={index === selectedIndex ? 'suggestion suggestion--active' : 'suggestion'}. Stan aktywny zazwyczaj wykorzystuje zmianę koloru tła, dzięki czemu jasno wskazuje element, który zostanie wybrany po naciśnięciu klawisza Enter.

Przewijanie wybranego elementu do widoku

Gdy lista sugestii ma ustawioną maksymalną wysokość i można ją przewijać, wyróżniony element może zniknąć z ekranu podczas nawigacji klawiaturą. Należy użyć tablicy refów do przechowywania elementów DOM sugestii i wywoływać listItemRefs.current[selectedIndex]?.scrollIntoView({ block: 'nearest' }) za każdym razem, gdy zmieni się selectedIndex. Wartość nearest właściwości block minimalizuje zakres przewijania.

Synchronizowanie selectedIndex po zmianie sugestii

Gdy zmieni się pole tekstowe i pojawi się nowa filtrowana lista, należy zresetować selectedIndex do -1 w ramach tej samej aktualizacji stanu albo w komponencie useEffect zależnym od sugestii. Nieaktualne indeksy wskazujące usunięte elementy mogłyby spowodować wybranie przez użytkownika niewłaściwej sugestii.

Pełny przebieg nawigacji klawiaturą

Kompletny przebieg wygląda następująco: użytkownik pisze, aby filtrować sugestie, ArrowDown wyróżnia pierwszy element, kolejne naciśnięcia ArrowDown poruszają się w dół listy, ArrowUp przesuwa zaznaczenie w górę, Enter wybiera wyróżniony element, a Escape zamyka listę bez wyboru. Obejmuje to wszystkie standardowe wzorce interakcji klawiaturowej oczekiwane przez użytkowników pól autouzupełniania.

Zapobieganie domyślnemu działaniu klawiszy strzałek

Podczas obsługi ArrowDown i ArrowUp w polu tekstowym należy zawsze wywoływać e.preventDefault(). Bez tego ArrowDown przenosi kursor tekstowy na koniec, a ArrowUp na początek tekstu. Te ruchy kursora kolidowałyby z nawigacją za pomocą selectedIndex, powodując mylące działanie.

Mapowanie klawiszy na działania nawigacyjne

Co powinno się stać, gdy użytkownik naciśnie Enter, a sugestia o indeksie selectedIndex = 2 będzie wyróżniona?

Podsumowanie lekcji: Nawigacja za pomocą klawiatury

Należy obsłużyć zdarzenie onKeyDown w polu wejściowym. ArrowDown zwiększa selectedIndex (z ograniczeniem do wartości max), ArrowUp zmniejsza tę wartość (z ograniczeniem do 0 lub -1), Enter wybiera wyróżniony element, Escape zamyka listę bez wybierania, a Tab zamyka ją i pozwala przeglądarce przenieść fokus. Dla klawiszy strzałek należy zawsze wywoływać preventDefault i przewijać listę tak, aby wyróżniony element był widoczny.

Często zadawane pytania

Czy lekcja „Nawigacja klawiaturą po listach sugestii” jest bezpłatna?

Tak — pełny tekst „Nawigacja klawiaturą po listach sugestii” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Nawigacja klawiaturą po listach sugestii”?

Obsługiwać klawisze ArrowUp, ArrowDown, Enter i Escape, aby nawigować po sugestiach i wybierać je bez myszy Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Nawigacja klawiaturą po listach sugestii”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kontrolowany input z listą sugestii
  2. Nawigacja klawiaturą po listach sugestii
  3. Asynchroniczne sugestie z debounce
  4. Dostępność widgetów autouzupełniania
← Powrót do React Academy