Asynchrone suggesties met debounce
Haal suggesties op uit een API terwijl de gebruiker typt, met debounce om overmatige netwerkaanvragen te voorkomen
Asynchrone suggesties met debounce is een gratis React Academy-les op CoddyKit. Dit is les 3 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.
Statische filter vervangen door API-ophaalactie
In plaats van een lokale array te filteren, roep je een API-eindpunt aan dat overeenkomende suggesties retourneert op basis van de zoekopdracht. De API-aanroep komt in een useEffect die afhankelijk is van de invoerwaarde na debouncing. Hierdoor verschuift de verantwoordelijkheid voor het filteren naar de server, waardoor benaderend zoeken, rangschikken en suggesties uit een veel grotere gegevensverzameling mogelijk worden.
Nieuwe status voor laden en fouten
Voeg twee nieuwe statusvariabelen toe aan het automatisch aanvullen: isLoading (boolean) om tijdens het ophalen een laadindicator weer te geven, en error (tekenreeks of null) om een foutmelding te tonen wanneer het ophalen mislukt. Zo krijgen gebruikers feedback over de asynchrone bewerking, in plaats van zich af te vragen waarom er geen suggesties verschijnen.
Het ophaaleffect
Stel in het ophaal-useEffect aan het begin setIsLoading(true) en setError(null) in. Roep daarna fetch(url) aan, verwerk de JSON, roep setSuggestions(data) aan en stel ten slotte setIsLoading(false) in een finally-blok in, of na zowel het succes- als het foutpad. De afhankelijkheidsarray van het effect bevat alleen debouncedInputValue.
AbortController gebruiken om aanvragen te annuleren
Maak bovenaan het effect een nieuwe AbortController en geef controller.signal mee aan de opties van fetch. Roep in de opruimfunctie controller.abort() aan. Wanneer de gebruiker typt en de waarde na debouncing verandert, wordt de vorige fetch afgebroken voordat de nieuwe start. Zo voorkom je dat verouderde resultaten in de verkeerde volgorde binnenkomen.
Abort-fouten afhandelen
Wanneer een fetch wordt afgebroken, wordt deze afgewezen met een DOMException met de naam AbortError. Controleer in je catch-blok if (err.name === 'AbortError') return; om afgebroken fetches stil te negeren. Handel alleen echte netwerkfouten of API-fouten af die aan de gebruiker moeten worden getoond.
De isLoading-status beheren
Stel isLoading vóór de fetch in op true en daarna, wanneer deze is geslaagd of mislukt, op false. Gebruik een finally-blok om ervoor te zorgen dat de status altijd wordt teruggezet: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Zonder het finally-blok zou een fetch-fout de laadindicator voor altijd laten draaien.
Laadindicator in de vervolgkeuzelijst
Wanneer isLoading true is en het invoerveld tekst bevat, toon je de vervolgkeuzelijst met daarin een gecentreerde laadindicator in plaats van de suggestielijst. Zo weet de gebruiker dat de resultaten eraan komen. Zodra het laden is voltooid en de suggesties zijn binnengekomen, vervang je de laadindicator door de werkelijke suggestie-items.
Foutstatus in de vervolgkeuzelijst
Wanneer error niet null is, toon je de vervolgkeuzelijst met de foutmelding in plaats van de suggesties. Een bericht als "Suggesties konden niet worden geladen. Probeer het opnieuw." is vriendelijker dan een ruwe fouttekst. Je kunt optioneel een knop toevoegen om het ophalen opnieuw te proberen.
Minimumaantal tekens
Voorkom dat je lege tekenreeksen of zeer korte zoekopdrachten ophaalt die te veel irrelevante resultaten opleveren. Controleer dit aan het begin van het effect: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. Zo verminder je onnodige API-aanroepen en voorkom je een overweldigende lijst resultaten op basis van één teken.
Opgehaalde resultaten in cache opslaan
Sla opgehaalde resultaten op in een Map in een useRef: const cache = useRef(new Map()). Controleer vóór het ophalen if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Sla het resultaat na een geslaagde fetch op. Zo voorkom je onnodige netwerkaanvragen voor zoekopdrachten die de gebruiker al heeft getypt.
Aanbevolen vertraging voor debouncing
Voor automatisch aanvullen is een vertraging van 200-300 ms voor debouncing de ideale middenweg. Kortere vertragingen (minder dan 200 ms) zorgen bij snelle typisten voor te veel aanvragen. Langere vertragingen (meer dan 400 ms) maken de suggesties traag en niet-responsief. 250 ms is een veelgebruikte standaardwaarde in productie-implementaties van automatisch aanvullen.
AbortController bij automatisch aanvullen
Waarom is AbortController belangrijk voor automatisch aanvullen met debouncing via een API?
Lesoverzicht: asynchrone suggesties met debouncing
Vervang statisch filteren door een API-ophaalactie in een useEffect die afhankelijk is van de waarde na debouncing. Gebruik AbortController om verouderde aanvragen te annuleren. Voeg de statussen isLoading en error toe voor feedback aan de gebruiker. Stel een minimumaantal tekens in om overmatig veel aanvragen te voorkomen. Sla resultaten op in een ref om onnodige netwerkaanvragen over te slaan.
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 “Asynchrone suggesties met debounce” gratis?
Ja — de volledige tekst van “Asynchrone suggesties met debounce” 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 “Asynchrone suggesties met debounce”?
Haal suggesties op uit een API terwijl de gebruiker typt, met debounce om overmatige netwerkaanvragen te voorkomen 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 3 van 4.
Hoe lang duurt de les “Asynchrone suggesties met debounce”?
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