Asynkrone forslag med debounce
Hent forslag fra en API, mens brugeren skriver, med debounce for at undgå for mange netværksforespørgsler.
Asynkrone forslag med debounce er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Erstatning af statisk filtrering med API-hentning
I stedet for at filtrere et lokalt array skal du kalde et API-endepunkt, der returnerer matchende forslag baseret på forespørgslen. API-kaldet placeres i en useEffect, der afhænger af den stabiliserede inputværdi. Det flytter ansvaret for filtreringen til serveren og muliggør tilnærmet matchning, rangordning og forslag fra et langt større datasæt.
Ny tilstand til indlæsning og fejl
Tilføj to nye tilstandsvariabler til autofuldførelsen: isLoading (boolesk) til at vise en indlæsningsindikator, mens hentningen er i gang, og error (streng eller null) til at vise en fejlmeddelelse, når hentningen mislykkes. På den måde får brugerne feedback om den asynkrone handling i stedet for at undre sig over, hvorfor forslagene ikke vises.
Henteeffekten
I den useEffect, der henter data, skal du først sætte setIsLoading(true) og setError(null), derefter kalde fetch(url), fortolke JSON-dataene, kalde setSuggestions(data) og til sidst kalde setIsLoading(false) i en finally-blok eller efter både succes- og fejlforløbet. Effektens afhængighedsliste indeholder kun debouncedInputValue.
Brug af AbortController til at annullere anmodninger
Opret en ny AbortController øverst i effekten, og giv controller.signal videre til hentningens indstillinger. Kald controller.abort() i oprydningsfunktionen. Når brugeren skriver, og den stabiliserede værdi ændres, annulleres den forrige hentning, før den nye starter, så gamle resultater ikke kommer frem i forkert rækkefølge.
Håndtering af annulleringsfejl
Når en hentning annulleres, afvises dens Promise med en DOMException med navnet AbortError. I din catch-blok skal du kontrollere if (err.name === 'AbortError') return; for at ignorere annullerede hentninger uden en meddelelse. Håndter kun reelle netværksfejl eller API-fejl, der bør vises til brugeren.
Håndtering af isLoading-tilstanden
Sæt isLoading til true før hentningen og til false, når den er fuldført eller afvist. Brug en finally-blok for at sikre, at den altid nulstilles: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Uden finally-blokken ville en fejl ved hentningen få indlæsningsindikatoren til at køre for evigt.
Indlæsningsindikator i rullemenuen
Når isLoading er true, og inputfeltet indeholder tekst, skal du vise rullemenuen med en centreret indlæsningsindikator i stedet for forslagslisten. Det fortæller brugeren, at resultaterne er på vej. Når indlæsningen er afsluttet, og forslagene er modtaget, skal du erstatte indikatoren med de faktiske forslag.
Fejltilstand i rullemenuen
Når error ikke er null, skal du vise rullemenuen med fejlmeddelelsen i stedet for forslagene. En meddelelse som "Kunne ikke indlæse forslag. Prøv igen." er venligere end en rå fejlstreng. Du kan eventuelt tilføje en knap til at prøve igen, som udløser hentningen manuelt.
Minimumsgrænse for antal tegn
Undgå at hente data for tomme strenge eller meget korte forespørgsler, som giver for mange irrelevante resultater. Kontrollér det i starten af effekten: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. Det reducerer unødvendige API-kald og forhindrer en overvældende resultatliste fra et enkelt tegn.
Cachelagring af hentede resultater
Gem hentede resultater i et useRef-baseret Map: const cache = useRef(new Map()). Før hentningen skal du kontrollere if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Efter en vellykket hentning skal du gemme resultatet. Det eliminerer overflødige netværksanmodninger for forespørgsler, som brugeren allerede har skrevet.
Anbefalet debounce-forsinkelse
For autofuldførelse er en debounce-forsinkelse på 200-300 ms det bedste kompromis. Kortere forsinkelser (under 200 ms) udløser for mange anmodninger for brugere, der skriver hurtigt. Længere forsinkelser (over 400 ms) får forslagene til at føles træge og langsomme til at reagere. 250 ms er en almindeligt brugt standardværdi i produktionsimplementeringer af autofuldførelse.
AbortController i autofuldførelse
Hvorfor er AbortController vigtig i en debounced autofuldførelse, der henter data fra et API?
Opsummering af lektionen: Asynkrone forslag med debounce
Erstat statisk filtrering med en API-hentning i en useEffect, der afhænger af den stabiliserede værdi. Brug AbortController til at annullere forældede anmodninger. Tilføj tilstand for isLoading og error, så brugeren får feedback. Sæt en minimumsgrænse for antal tegn for at undgå for mange kald. Gem resultater i en ref for at springe overflødige netværksanmodninger over.
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Asynkrone forslag med debounce” gratis?
Ja — hele teksten til “Asynkrone forslag med debounce” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Asynkrone forslag med debounce”?
Hent forslag fra en API, mens brugeren skriver, med debounce for at undgå for mange netværksforespørgsler. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Asynkrone forslag med debounce”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Kontrolleret input med forslagsliste
- Tastaturnavigation i forslagslister
- Asynkrone forslag med debounce
- Tilgængelighed for autocomplete-widgets