React Academy · Oppitunti

Asynkroniset ehdotukset debouncella

Noutakaa ehdotuksia API:sta käyttäjän kirjoittaessa ja rajoittakaa pyyntöjä debouncella

Oppitunti 3/413 vaihetta

Asynkroniset ehdotukset debouncella on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

Staattisen suodatuksen korvaaminen API-haulla

Paikallisen taulukon suodattamisen sijaan kutsu API-päätepistettä, joka palauttaa kyselyä vastaavat ehdotukset. API-kutsu sijoitetaan useEffect-efektiin, jonka riippuvuutena on syötteen viivästetty arvo. Näin suodatusvastuu siirtyy palvelimelle, mikä mahdollistaa sumean haun, tulosten järjestämisen ja ehdotukset paljon suuremmasta tietojoukosta.

Uusi tila lataukselle ja virheille

Lisää automaattiseen täydennykseen kaksi uutta tilamuuttujaa: isLoading (totuusarvo), jolla näytetään latausosoitin haun aikana, ja error (merkkijono tai null), jolla näytetään virheilmoitus haun epäonnistuessa. Näin käyttäjä saa palautetta asynkronisesta toiminnosta sen sijaan, että hänen tarvitsisi ihmetellä, miksi ehdotuksia ei näy.

Hakuun liittyvä efekti

Aseta hakuun liittyvässä useEffect-efektissä aluksi setIsLoading(true) ja setError(null), kutsu sitten fetch(url)-funktiota, jäsennä JSON, kutsu setSuggestions(data) ja aseta lopuksi setIsLoading(false) finally-lohkossa tai sekä onnistumis- että virhepolun jälkeen. Efektin riippuvuustaulukossa on vain debouncedInputValue.

Pyyntöjen peruuttaminen AbortControllerilla

Luo efektin alussa uusi AbortController ja välitä controller.signal haun asetuksiin. Kutsu siivousfunktiossa controller.abort()-metodia. Kun käyttäjä kirjoittaa ja viivästetty arvo muuttuu, edellinen haku peruutetaan ennen uuden aloittamista. Näin vanhentuneet tulokset eivät pääse saapumaan väärässä järjestyksessä.

Peruutusvirheiden käsittely

Kun haku peruutetaan, se hylätään DOMException-poikkeuksella, jonka nimi on AbortError. Tarkista catch-lohkossa if (err.name === 'AbortError') return;, jotta peruutetut haut ohitetaan hiljaisesti. Käsittele vain aidot verkkovirheet tai API-virheet, jotka käyttäjälle pitää näyttää.

isLoading-tilan hallinta

Aseta isLoading arvoksi true ennen hakua ja arvoksi false, kun haku valmistuu onnistuneesti tai epäonnistuu. Käytä finally-lohkoa varmistaaksesi, että arvo palautetaan aina: fetch(url).then(...).catch(...).finally(() => setIsLoading(false)). Ilman finally-lohkoa hakuerhe jättäisi latausosoittimen pyörimään loputtomasti.

Latausosoitin pudotusvalikossa

Kun isLoading on tosi ja syötekentässä on tekstiä, näytä pudotusvalikko, jonka keskellä on latausosoitin ehdotusluettelon sijaan. Näin käyttäjä tietää, että tulokset ovat tulossa. Kun lataus on päättynyt ja ehdotukset ovat saapuneet, korvaa latausosoitin varsinaisilla ehdotuksilla.

Virhetila pudotusvalikossa

Kun error ei ole null, näytä pudotusvalikossa virheilmoitus ehdotusten sijaan. Esimerkiksi "Ehdotuksia ei voitu ladata. Yritä uudelleen." on käyttäjäystävällisempi kuin raaka virhemerkkijono. Voit myös lisätä uudelleenyrityspainikkeen, joka käynnistää haun manuaalisesti uudelleen.

Merkkimäärän vähimmäisraja

Vältä hakua tyhjillä merkkijonoilla tai hyvin lyhyillä kyselyillä, jotka tuottavat liikaa epäolennaisia tuloksia. Lisää efektin alkuun ehto: if (debouncedInputValue.length < 2) { setSuggestions([]); return; }. Näin tarpeettomat API-kutsut vähenevät eikä yhden merkin perusteella synny valtavaa tulosluetteloa.

Haettujen tulosten välimuisti

Tallenna haetut tulokset useRef-hookin Map-rakenteeseen: const cache = useRef(new Map()). Tarkista ennen hakua if (cache.current.has(query)) { setSuggestions(cache.current.get(query)); return; }. Tallenna tulos onnistuneen haun jälkeen. Näin jo kirjoitetuille kyselyille ei tehdä tarpeettomia verkkopyyntöjä.

Suositeltu viive automaattiselle täydennykselle

Automaattisessa täydennyksessä toimivin viive on yleensä 200–300 ms. Lyhyemmät viiveet (alle 200 ms) käynnistävät liian monta pyyntöä nopeasti kirjoittaville käyttäjille. Pidemmät viiveet (yli 400 ms) saavat ehdotukset tuntumaan hitailta ja reagoimattomilta. 250 ms on yleisesti käytetty oletusarvo tuotantokäytössä olevissa automaattisen täydennyksen toteutuksissa.

AbortController automaattisessa täydennyksessä

Miksi AbortController on tärkeä automaattisessa täydennyksessä, joka hakee tietoja API:sta ja käyttää debounce-viivettä?

Oppitunnin kertaus: asynkroniset ehdotukset ja debounce

Korvaa staattinen suodatus API-haulla useEffect-efektin sisällä ja käytä riippuvuutena viivästettyä arvoa. Peruuta vanhentuneet pyynnöt AbortController-oliolla. Lisää isLoading- ja error-tila, jotta käyttäjä saa palautetta. Aseta merkkimäärän vähimmäisraja tarpeettomien kutsujen välttämiseksi. Tallenna tulokset refiin, jotta tarpeettomat verkkopyynnöt voidaan ohittaa.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”Asynkroniset ehdotukset debouncella” ilmainen?

Kyllä – oppitunnin ”Asynkroniset ehdotukset debouncella” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Asynkroniset ehdotukset debouncella”?

Noutakaa ehdotuksia API:sta käyttäjän kirjoittaessa ja rajoittakaa pyyntöjä debouncella Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Asynkroniset ehdotukset debouncella”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Kontrolloitu syötekenttä ehdotuslistalla
  2. Näppäimistönavigointi ehdotuslistoissa
  3. Asynkroniset ehdotukset debouncella
  4. Autocomplete-widgettien saavutettavuus
← Takaisin: React Academy