0Pricing
React Academy · Lektion

Kontrolliertes Input-Feld mit Vorschlagsliste

Die Grundlage erstellen: ein kontrolliertes Input-Feld mit einer darunter angezeigten, gefilterten Vorschlagsliste

Kontrolliertes Input-Feld mit Vorschlagsliste ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Überblick über die Komponentenstruktur

Eine Autocomplete-Komponente besteht aus zwei Hauptteilen: einem kontrollierten Texteingabefeld und einer Dropdown-Liste mit Vorschlägen. Das Eingabefeld befindet sich im normalen Dokumentfluss, während das Dropdown direkt darunter absolut positioniert wird. Zusammen funktionieren sie als ein einziges interaktives Widget, obwohl sie separate DOM-Elemente sind.

Benötigte State-Variablen

Sie benötigen vier State-Variablen: inputValue (String — der eingegebene Text), suggestions (Array — die aktuell passenden Elemente), isOpen (Boolean — ob das Dropdown sichtbar ist) und selectedIndex (Number — welcher Vorschlag für die Tastaturnavigation hervorgehoben ist; beginnt bei -1, wenn keiner ausgewählt ist).

Das Eingabefeld kontrollieren

Machen Sie das Eingabefeld vollständig kontrolliert: value={inputValue} und onChange={e => setInputValue(e.target.value)}. Dadurch hat React die vollständige Kontrolle über den angezeigten Text. Jeder Tastendruck aktualisiert den State und löst ein erneutes Rendern mit dem neuen Wert aus. Verwenden Sie für Autocomplete niemals ein unkontrolliertes Eingabefeld — Sie müssen den Wert programmgesteuert lesen und setzen können.

Aus einer statischen Liste filtern

Wenn die Vorschläge aus einem lokalen Array stammen, filtern Sie bei jedem Rendern anhand von inputValue: Vergleichen Sie jedes Element mit item.toLowerCase().includes(inputValue.toLowerCase()). Bei einer großen Liste können Sie das mit useMemo berechnen, um eine erneute Berechnung bei jedem Rendern zu vermeiden. Für kleine Listen ist Inline-Filtern problemlos geeignet.

Das Dropdown ein- und ausblenden

Öffnen Sie das Dropdown, wenn inputValue.length > 0 und suggestions.length > 0 gilt. Schließen Sie es, wenn das Eingabefeld den Fokus verliert (mit einer kurzen Verzögerung, damit Klicks auf Vorschläge zuerst registriert werden), wenn ein Vorschlag ausgewählt wird oder wenn die Escape-Taste gedrückt wird. Setzen Sie isOpen entsprechend, um das bedingte Rendern zu steuern.

Blur mit einer Verzögerung behandeln

Das onBlur-Ereignis wird ausgelöst, wenn das Eingabefeld den Fokus verliert, beispielsweise wenn der Benutzer auf einen Vorschlag klickt. Wenn Sie das Dropdown beim Blur sofort schließen, wird der Klick auf den Vorschlag nicht registriert, weil das Dropdown verschwindet, bevor der Klick ausgelöst wird. Verwenden Sie setTimeout(() => setIsOpen(false), 150), damit der Klick Zeit zur Verarbeitung hat.

Das Dropdown gestalten

Positionieren Sie das Dropdown mit position: absolute, sodass es den Inhalt unterhalb des Eingabefelds überlagert, statt ihn nach unten zu verschieben. Setzen Sie einen hohen z-index (100+), damit es über anderen Inhalten angezeigt wird. Legen Sie mit max-height eine maximale Höhe fest und verwenden Sie overflow-y: auto, damit die Liste bei vielen Ergebnissen nicht zu groß wird.

Vorschläge anklickbar machen

Jedes Vorschlagselement sollte einen onClick-Handler besitzen: onClick={() => { setInputValue(suggestion); setIsOpen(false); }}. Dadurch wird das Eingabefeld auf den ausgewählten Vorschlag gesetzt und das Dropdown geschlossen. Die Auswahl fühlt sich sofort und natürlich an und entspricht dem Verhalten, das Benutzer von Autocomplete-Feldern erwarten.

Blur vor dem Klick verhindern

Eine Alternative zum Blur-Timeout ist onMouseDown={e => e.preventDefault()} für jedes Vorschlagselement. Dadurch wird verhindert, dass mousedown den Fokus vom Eingabefeld abzieht, sodass beim Klicken auf einen Vorschlag kein Blur-Ereignis ausgelöst wird. Das Eingabefeld behält den Fokus, und der Klick-Handler wird sauber ausgeführt.

Überblick über die Tastaturinteraktion

Ein gutes Autocomplete muss per Tastatur bedienbar sein. Der Benutzer sollte ArrowDown drücken können, um den ersten Vorschlag hervorzuheben, die Taste weiter drücken können, um sich in der Liste nach unten zu bewegen, mit Enter auswählen und mit Escape schließen können, ohne eine Auswahl zu treffen. Dies wird durch die Verarbeitung von onKeyDown am Eingabeelement umgesetzt.

selectedIndex bei Eingabeänderungen zurücksetzen

Setzen Sie selectedIndex immer auf -1 zurück, wenn der Benutzer tippt und sich inputValue ändert. Dadurch wird eine vorherige Tastaturauswahl gelöscht, sodass bei der neuen Liste gefilterter Vorschläge zunächst kein Element hervorgehoben ist. Ein veralteter Auswahlindex, der nach einer Listenänderung auf ein anderes Element zeigt, ist verwirrend und falsch.

Reihenfolge von Blur- und MouseDown-Ereignissen

Warum sollte bei Vorschlagselementen onMouseDown mit e.preventDefault() verwendet werden, statt sich auf ein Blur-Timeout zu verlassen?

Lektionsrückblick: Kontrolliertes Eingabefeld mit Vorschlägen

Ein Autocomplete-Widget benötigt vier State-Variablen: inputValue, suggestions, isOpen und selectedIndex. Verwenden Sie ein kontrolliertes Eingabefeld, filtern Sie Vorschläge anhand der Eingabe und steuern Sie die Sichtbarkeit des Dropdowns über isOpen. Behandeln Sie das Wettrennen zwischen Blur und Klick entweder mit einem Timeout oder mit onMouseDown und preventDefault. Setzen Sie selectedIndex bei jeder Eingabeänderung zurück.

Häufig gestellte Fragen

Ist die Lektion „Kontrolliertes Input-Feld mit Vorschlagsliste“ kostenlos?

Ja — der vollständige Text von „Kontrolliertes Input-Feld mit Vorschlagsliste“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Kontrolliertes Input-Feld mit Vorschlagsliste“?

Die Grundlage erstellen: ein kontrolliertes Input-Feld mit einer darunter angezeigten, gefilterten Vorschlagsliste Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Kontrolliertes Input-Feld mit Vorschlagsliste“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Kontrolliertes Input-Feld mit Vorschlagsliste
  2. Tastaturnavigation in Vorschlagslisten
  3. Asynchrone Vorschläge mit Debounce
  4. Barrierefreiheit für Autocomplete-Widgets
← Zurück zu React Academy