React Academy · leksjon

Kontrollert inndatafelt med forslagsliste

Bygg grunnlaget: et kontrollert inndatafelt som viser en filtrert rullegardinliste med forslag nedenfor.

Leksjon 1 av 413 trinn

Kontrollert inndatafelt med forslagsliste er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Oversikt over komponentstrukturen

En autocomplete-komponent har to hoveddeler: et kontrollert inndatafelt og en nedtrekksliste med forslag. Inndatafeltet ligger i den normale dokumentflyten, mens nedtrekkslisten er absolutt posisjonert rett under det. Sammen fungerer de som én interaktiv widget, selv om de er separate DOM-elementer.

Nødvendige tilstandsvariabler

Det trengs fire tilstandsvariabler: inputValue (streng – det som er skrevet inn), suggestions (array – gjeldende samsvarende elementer), isOpen (boolsk verdi – om nedtrekkslisten er synlig) og selectedIndex (tall – hvilket forslag som er uthevet for tastaturnavigering, med startverdien -1 når ingen er valgt).

Kontrollere inndatafeltet

Gjør inndatafeltet fullt ut kontrollert: value={inputValue} og onChange={e => setInputValue(e.target.value)}. Dette gir React full kontroll over teksten som vises. Hvert tastetrykk oppdaterer tilstanden, noe som utløser en ny rendering med den nye verdien. Bruk aldri et ukontrollert inndatafelt i autocomplete – det er nødvendig å kunne lese og angi verdien programmatisk.

Filtrere fra en statisk liste

Når forslagene kommer fra en lokal array, filtrerer du ved hver rendering basert på inputValue: sammenlign hvert element ved å bruke item.toLowerCase().includes(inputValue.toLowerCase()). Dette kan beregnes med useMemo hvis listen er stor, slik at unødvendige beregninger ved hver nye rendering unngås. For små lister er filtrering direkte i renderingen tilstrekkelig.

Vise og skjule nedtrekkslisten

Åpne nedtrekkslisten når inputValue.length > 0 og suggestions.length > 0. Lukk den når inndatafeltet mister fokus (med en kort forsinkelse slik at klikk på forslag rekker å registreres først), når et forslag velges, eller når Escape-tasten trykkes. Angi isOpen tilsvarende for å styre den betingede renderingen.

Håndtere blur med en forsinkelse

onBlur-hendelsen utløses når inndatafeltet mister fokus, noe som skjer når brukeren klikker på et forslag. Hvis nedtrekkslisten lukkes umiddelbart ved blur, blir klikket på forslaget aldri registrert fordi listen forsvinner før klikkhendelsen utløses. Bruk setTimeout(() => setIsOpen(false), 150) for å gi klikket tid til å registreres.

Stile nedtrekkslisten

Posisjoner nedtrekkslisten med position: absolute slik at den legges over innholdet under inndatafeltet i stedet for å skyve det nedover. Angi en høy z-index (100+) slik at den vises over annet innhold. Angi en max-height med overflow-y: auto for å hindre at listen blir for høy når det finnes mange resultater.

Gjøre forslag klikkbare

Hvert forslagselement bør ha en onClick-behandler: onClick={() => { setInputValue(suggestion); setIsOpen(false); }}. Dette setter inndatafeltet til det valgte forslaget og lukker nedtrekkslisten. Valget føles umiddelbart og naturlig, i tråd med oppførselen brukere forventer fra autocomplete-felt.

Forhindre blur før klikk

Et alternativ til en blur-forsinkelse er å bruke onMouseDown={e => e.preventDefault()} på hvert forslagselement. Dette forhindrer at mousedown stjeler fokus fra inndatafeltet, slik at blur-hendelsen ikke utløses når et forslag klikkes. Inndatafeltet beholder fokuset, og klikkbehandleren utløses uten problemer.

Oversikt over tastaturinteraksjon

God autocomplete må kunne navigeres med tastaturet. Brukeren skal kunne trykke på ArrowDown for å utheve det første forslaget, fortsette å trykke for å bevege seg nedover i listen, trykke på Enter for å velge og trykke på Escape for å lukke uten å velge. Dette implementeres ved å håndtere onKeyDown på inndataelementet.

Tilbakestille selectedIndex ved endring av inndata

Hver gang brukeren skriver og inputValue endres, tilbakestilles selectedIndex til -1. Dette fjerner tidligere tastaturvalg, slik at det nye settet med filtrerte forslag starter uten utheving. En foreldet utvalgsindeks som peker på et annet element etter at listen er endret, er forvirrende og feil.

Rekkefølgen for blur- og MouseDown-hendelser

Hvorfor bruke onMouseDown med e.preventDefault() på forslagselementer i stedet for å stole på en blur-forsinkelse?

Oppsummering av leksjonen: Kontrollert inndata med forslag

En autocomplete-widget trenger fire tilstandsvariabler: inputValue, suggestions, isOpen og selectedIndex. Bruk et kontrollert inndatafelt, filtrer forslag basert på inndata, og styr synligheten til nedtrekkslisten via isOpen. Håndter kappløpet mellom blur og klikk med enten et tidsavbrudd eller onMouseDown preventDefault. Tilbakestill selectedIndex hver gang inndata endres.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Kontrollert inndatafelt med forslagsliste» gratis?

Ja – hele teksten i «Kontrollert inndatafelt med forslagsliste» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Kontrollert inndatafelt med forslagsliste»?

Bygg grunnlaget: et kontrollert inndatafelt som viser en filtrert rullegardinliste med forslag nedenfor. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Kontrollert inndatafelt med forslagsliste»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Kontrollert inndatafelt med forslagsliste
  2. Tastaturnavigasjon i forslagslister
  3. Asynkrone forslag med debounce
  4. Tilgjengelighet for autofullføringskomponenter
← Tilbake til React Academy