React Academy · leksjon

Asynkrone forslag med debounce

Hent forslag fra et API mens brukeren skriver, med debounce for å unngå for mange nettverksforespørsler.

Leksjon 3 av 413 trinn

Asynkrone forslag med debounce er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 3 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.

Erstatt statisk filtrering med API-henting

I stedet for å filtrere en lokal matrise kaller du et API-endepunkt som returnerer samsvarende forslag basert på spørringen. API-kallet legges i en useEffect som avhenger av den debouncete inndataverdien. Dette flytter ansvaret for filtreringen til serveren og muliggjør fuzzy matching, rangering og forslag fra et langt større datasett.

Ny state for innlasting og feil

Legg til to nye state-variabler i autocomplete-komponenten: isLoading (boolean) for å vise en spinner mens hentingen pågår, og error (string eller null) for å vise en feilmelding når hentingen mislykkes. Disse gir brukerne tilbakemelding om den asynkrone operasjonen i stedet for å la dem lure på hvorfor forslagene ikke vises.

Fetch-effekten

I fetch-useEffect-en setter du setIsLoading(true) og setError(null) i starten. Deretter kaller du fetch(url), tolker JSON-dataene, kaller setSuggestions(data) og setter til slutt setIsLoading(false) i en finally-blokk eller etter både suksess- og feilforløpet. Effektens avhengighetsmatrise inneholder bare debouncedInputValue.

Bruk AbortController til å avbryte forespørsler

Opprett en ny AbortController øverst i effekten, og send controller.signal med i fetch-alternativene. Kall controller.abort() i oppryddingsfunksjonen. Når brukeren skriver og den debouncete verdien endres, avbrytes den forrige hentingen før den nye starter. Dermed forhindrer du at foreldede resultater kommer i feil rekkefølge.

Håndtering av avbruddsfeil

Når en fetch avbrytes, avvises den med en DOMException med navnet AbortError. I catch-blokken kontrollerer du if (err.name === 'AbortError') return; for å ignorere avbrutte hentinger uten å vise en melding. Håndter bare reelle nettverks- eller API-feil som bør vises til brukeren.

Håndtering av isLoading-state

Sett isLoading til true før hentingen og til false etter at den er fullført eller har feilet. Bruk en finally-blokk for å sikre at verdien alltid tilbakestilles: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Uten finally-blokken ville en hente-feil ført til at spinneren fortsatte å kjøre for alltid.

Lasteindikator i nedtrekkslisten

Når isLoading er true og inputfeltet inneholder tekst, viser du nedtrekkslisten med en sentrert spinner i stedet for forslagslisten. Dette forteller brukeren at resultatene er på vei. Når innlastingen er ferdig og forslagene er kommet, bytter du ut spinneren med de faktiske forslagene.

Feiltilstand i nedtrekkslisten

Når error ikke er null, viser du nedtrekkslisten med feilmeldingen i stedet for forslagene. En melding som "Kunne ikke laste inn forslag. Prøv på nytt." er mer brukervennlig enn en rå feilmelding. Du kan eventuelt legge til en knapp for å prøve på nytt, som starter hentingen manuelt.

Minimumsgrense for antall tegn

Unngå å hente data for tomme strenger eller svært korte spørringer som gir for mange irrelevante resultater. Legg inn en kontroll i starten av effekten: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. Dette reduserer unødvendige API-kall og hindrer en overveldende resultatliste fra ett enkelt tegn.

Bufring av hentede resultater

Lag­re hentede resultater i et Map-objekt i en useRef: const cache = useRef(new Map()). Før du henter data, kontrollerer du if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Lagre resultatet etter en vellykket henting. Dette eliminerer overflødige nettverksforespørsler for spørringer brukeren allerede har skrevet.

Anbefalt debounce-forsinkelse

For autocomplete er en debounce-forsinkelse på 200–300 ms det beste kompromisset. Kortere forsinkelser (under 200 ms) utløser for mange forespørsler for brukere som skriver raskt. Lengre forsinkelser (over 400 ms) får forslagene til å virke trege og lite responsive. 250ms er en vanlig standardverdi i produksjonsimplementasjoner av autocomplete.

AbortController i autocomplete

Hvorfor er AbortController viktig i en debouncet autocomplete som henter data fra et API?

Oppsummering av leksjonen: Asynkrone forslag med debounce

Bytt ut statisk filtrering med en API-henting i en useEffect som avhenger av den debouncete verdien. Bruk AbortController til å avbryte foreldede forespørsler. Legg til isLoading- og error-state for å gi brukeren tilbakemelding. Sett en minimumsgrense for antall tegn for å unngå for mange kall. Bufre resultatene i en ref for å hoppe over overflødige nettverksforespørsler.

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 «Asynkrone forslag med debounce» gratis?

Ja – hele teksten i «Asynkrone forslag med debounce» 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 «Asynkrone forslag med debounce»?

Hent forslag fra et API mens brukeren skriver, med debounce for å unngå for mange nettverksforespørsler. 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 3 av 4.

Hvor lang tid tar leksjonen «Asynkrone forslag med debounce»?

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