Kontrollert inndatafelt med forslagsliste
Bygg grunnlaget: et kontrollert inndatafelt som viser en filtrert rullegardinliste med forslag nedenfor.
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.
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
- Kontrollert inndatafelt med forslagsliste
- Tastaturnavigasjon i forslagslister
- Asynkrone forslag med debounce
- Tilgjengelighet for autofullføringskomponenter