Gecontroleerde input met suggestielijst
Bouw de basis: een gecontroleerde input die eronder een gefilterde suggestielijst toont
Gecontroleerde input met suggestielijst is een gratis React Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.
Overzicht van de componentstructuur
Een component voor automatisch aanvullen bestaat uit twee hoofdonderdelen: een gecontroleerd tekstinvoerveld en een vervolgkeuzelijst met suggesties. Het invoerveld staat in de normale documentstroom en de vervolgkeuzelijst wordt absoluut direct eronder geplaatst. Samen werken ze als één interactief onderdeel, ook al zijn het afzonderlijke DOM-elementen.
Vereiste statusvariabelen
Je hebt vier statusvariabelen nodig: inputValue (string — wat er is getypt), suggestions (array — de huidige overeenkomende items), isOpen (boolean — of de vervolgkeuzelijst zichtbaar is) en selectedIndex (number — welke suggestie voor toetsenbordnavigatie is gemarkeerd; begint op -1 als niets is geselecteerd).
De invoer besturen
Maak het invoerveld volledig gecontroleerd: value={inputValue} en onChange={e => setInputValue(e.target.value)}. Zo houdt React volledige controle over de weergegeven tekst. Elke toetsaanslag werkt de status bij, waardoor het onderdeel opnieuw wordt gerenderd met de nieuwe waarde. Gebruik nooit een ongecontroleerd invoerveld voor automatisch aanvullen — je moet de waarde programmatisch kunnen lezen en instellen.
Filteren vanuit een statische lijst
Wanneer suggesties uit een lokale lijst komen, filter je bij elke render op basis van inputValue: vergelijk elk item met item.toLowerCase().includes(inputValue.toLowerCase()). Je kunt dit met useMemo berekenen als de lijst groot is, zodat je niet bij elke nieuwe render opnieuw hoeft te berekenen. Voor kleine lijsten is filteren in de component zelf prima.
De vervolgkeuzelijst tonen en verbergen
Open de vervolgkeuzelijst wanneer inputValue.length > 0 en suggestions.length > 0. Sluit haar wanneer het invoerveld de focus verliest (met een kleine vertraging zodat klikken op een suggestie eerst kan worden verwerkt), wanneer een suggestie is geselecteerd of wanneer de Escape-toets wordt ingedrukt. Stel isOpen overeenkomstig in om de voorwaardelijke weergave aan te sturen.
Focusverlies met een vertraging afhandelen
De gebeurtenis onBlur wordt geactiveerd wanneer het invoerveld de focus verliest, bijvoorbeeld wanneer de gebruiker op een suggestie klikt. Als je de vervolgkeuzelijst onmiddellijk bij focusverlies sluit, wordt de klik op de suggestie nooit verwerkt omdat de lijst verdwijnt voordat de klik plaatsvindt. Gebruik setTimeout(() => setIsOpen(false), 150) zodat de klik tijd krijgt om te worden verwerkt.
De vervolgkeuzelijst opmaken
Plaats de vervolgkeuzelijst met position: absolute, zodat deze over de inhoud onder het invoerveld heen valt in plaats van die omlaag te duwen. Stel een hoge z-index in (100+) zodat de lijst boven andere inhoud verschijnt. Stel een max-height in met overflow-y: auto om te voorkomen dat de lijst te hoog wordt wanneer er veel resultaten zijn.
Suggesties klikbaar maken
Elk suggestie-item moet een onClick-afhandelaar hebben: onClick={() => { setInputValue(suggestion); setIsOpen(false); }}. Hiermee stel je de invoer in op de geselecteerde suggestie en sluit je de vervolgkeuzelijst. De selectie voelt onmiddellijk en natuurlijk aan, zoals gebruikers verwachten van velden voor automatisch aanvullen.
Focusverlies vóór een klik voorkomen
Een alternatief voor de time-out bij focusverlies is onMouseDown={e => e.preventDefault()} op elk suggestie-item. Hiermee voorkom je dat de gebeurtenis mousedown de focus van het invoerveld overneemt, zodat focusverlies niet optreedt wanneer je op een suggestie klikt. Het invoerveld behoudt de focus en de klikafhandelaar wordt correct uitgevoerd.
Overzicht van toetsenbordinteractie
Een goede functie voor automatisch aanvullen moet met het toetsenbord te bedienen zijn. De gebruiker moet op ArrowDown kunnen drukken om de eerste suggestie te markeren, verder kunnen drukken om door de lijst te gaan, op Enter kunnen drukken om te selecteren en op Escape kunnen drukken om te sluiten zonder te selecteren. Je implementeert dit door onKeyDown op het invoerelement af te handelen.
selectedIndex opnieuw instellen bij wijziging van invoer
Stel selectedIndex telkens opnieuw in op -1 wanneer de gebruiker typt en inputValue verandert. Hiermee verwijder je een eerdere toetsenbordselectie, zodat de nieuwe reeks gefilterde suggesties met niets gemarkeerd begint. Een verouderde selectie-index die na een wijziging van de lijst naar een ander item verwijst, is verwarrend en onjuist.
Volgorde van focusverlies- en muisklikgebeurtenissen
Waarom gebruik je onMouseDown met e.preventDefault() op suggestie-items in plaats van te vertrouwen op een time-out bij focusverlies?
Samenvatting van de les: gecontroleerde invoer met suggesties
Een onderdeel voor automatisch aanvullen heeft vier statusvariabelen nodig: inputValue, suggestions, isOpen en selectedIndex. Gebruik een gecontroleerd invoerveld, filter suggesties op basis van de invoer en beheer de zichtbaarheid van de vervolgkeuzelijst via isOpen. Los de raceconditie waarbij focusverlies vóór de klik plaatsvindt op met een time-out of met onMouseDown en preventDefault. Stel selectedIndex telkens opnieuw in wanneer de invoer verandert.
Leer React met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 88
- Lessen
- 324
Veelgestelde vragen
Is de les “Gecontroleerde input met suggestielijst” gratis?
Ja — de volledige tekst van “Gecontroleerde input met suggestielijst” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.
Wat leer ik in “Gecontroleerde input met suggestielijst”?
Bouw de basis: een gecontroleerde input die eronder een gefilterde suggestielijst toont Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met React Academy te beginnen?
Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Gecontroleerde input met suggestielijst”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over React Academy?
Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Gecontroleerde input met suggestielijst
- Toetsenbordnavigatie in suggestielijsten
- Asynchrone suggesties met debounce
- Toegankelijkheid voor autocompletewidgets