React Academy · Oppitunti

Mukautetun useDebounce-hookin toteuttaminen

Rakentakaa useDebounce-hook, joka viivästyttää tilapäivityksiä, kunnes käyttäjä lopettaa kirjoittamisen

Oppitunti 2/413 vaihetta

Mukautetun useDebounce-hookin toteuttaminen on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Hookin allekirjoitus

useDebounce-hook hyväksyy arvon ja viiveen millisekunteina ja palauttaa arvosta debouncetun version: function useDebounce(value, delay). Palautettu debouncedValue tulee todellisen arvon jäljessä ja päivittyy vasta, kun määritetty viive on kulunut ilman uutta muutosta.

debouncedValue-arvon sisäinen tila

Ilmoittakaa hookin sisällä tilamuuttuja: const [debouncedValue, setDebouncedValue] = useState(value). Tämä tila sisältää viimeisimmän vahvistetun arvon. Se alkaa alkuperäisen arvon mukaisena ja päivittyy vasta debounce-ajastimen käynnistyttyä. debouncedValue-arvoa lukevat komponentit näkevät vakaan, asettuneen syötteen.

useEffect ja setTimeout

Ydinlogiikka on useEffect-hookissa: luokaa ajastin komennolla setTimeout(() => setDebouncedValue(value), delay) ja tallentakaa sen tunniste. Effect suoritetaan aina, kun value tai delay muuttuu. Ajastin käynnistyy delay millisekuntia viimeisimmän muutoksen jälkeen ja päivittää debouncetun tilan.

Ajastimen tyhjentäminen cleanupissa

useEffect-hookin cleanup-funktio kutsuu clearTimeout(timerId)-funktiota. Kun value muuttuu ennen ajastimen käynnistymistä, React suorittaa clean­up-funktion ja peruuttaa odottavan päivityksen. Sen jälkeen ajastetaan uusi ajastin. Tämä on debouncen toiminnan keskeinen mekanismi: nopeat muutokset nollaavat ajastimen jatkuvasti.

Effectin riippuvuudet

useEffect-hookin riippuvuustaulukon tulee sisältää [value, delay]. Effect suoritetaan uudelleen aina, kun syötteen arvo muuttuu, jolloin uusi ajastin ajoitetaan, sekä aina, kun delay muuttuu, jos kutsuja säätää debounce-väliä dynaamisesti. Molemmat on sisällytettävä vanhentuneiden sulkeumien ongelmien välttämiseksi.

Hookin käyttäminen komponentissa

Käyttö on suoraviivaista: const debouncedSearch = useDebounce(searchInput, 300). Erillinen useEffect-hook, jonka riippuvuutena on [debouncedSearch], käynnistää API-kutsun. Syötteen tila (searchInput) päivittyy heti, joten syöte pysyy responsiivisena; vain API-kutsu odottaa debouncea.

Ensimmäisen kutsun välitön suoritus reunatapauksena

Oletusarvoisesti vakiototeutus suoritetaan vain trailing edge -vaiheessa. Jos haluatte immediate-tilan, joka kutsuu funktiota ensimmäisellä käynnistyskerralla mutta debouncettaa sitä seuraavat kutsut, tarvitsette ref-arvon seuraamaan, onko kutsu jo tehty, ja nollaamaan tiedon aikakatkaisun jälkeen. Tämä on monimutkaisempaa, mutta hyödyllistä lähetyspainikkeissa.

TypeScriptin geneerinen tyyppiparametri

Tehkää hookista geneerinen tyyppiturvallisuuden takaamiseksi: function useDebounce(value: T, delay: number): T. Näin TypeScript voi päätellä debouncedValue-arvon tyypin value-arvon tyypistä. Geneerinen parametri T välittyy automaattisesti sisäiseen tilaan ja palautustyyppiin.

Yleinen virhe: cleanup puuttuu

Yleinen virhe on unohtaa palauttaa cleanup-funktio useEffect-hookista. Ilman clean­up-funktiota jokainen arvon muutos luo uuden ajastimen, mutta vanhaa ei koskaan peruuteta. Tämän seurauksena useat ajastimet käynnistyvät ja setDebouncedValue-funktiota kutsutaan useita kertoja vanhentuneilla arvoilla, jolloin debounce ei enää toimi.

Vertailu useRef-pohjaisiin lähestymistapoihin

Vaihtoehtoisesti debounce-funktion voi tallentaa useRef-hookiin Lodashia käyttäen. Toisin kuin tilapohjainen lähestymistapa, ref-pohjainen lähestymistapa debouncettaa arvojen sijaan callback-funktioita. Käyttäkää tilapohjaista hookia, kun tarvitsette johdetun arvon, ja callback-lähestymistapaa, kun haluatte debouncettaa tapahtumakäsittelijän.

Toiminnan todentaminen käytännössä

Varmistakaa hookin toiminta lisäämällä console-loki timeout-callbackin sisään ja tarkkailemalla selaimen konsolia samalla, kun kirjoitatte nopeasti. Näette yhden lokimerkinnän jokaista kirjoittamisen "lopettamista" kohden, ette yhtä jokaista näppäimen painallusta kohden. Nopean kirjoittamisen aikana lokimerkintöjä pitäisi olla huomattavasti vähemmän kuin näppäimen painalluksia.

useDebounce-hookin useEffect-cleanup

Miksi useDebounce-hookin useEffect-hookin pitää palauttaa cleanup-funktio, joka kutsuu clearTimeout-funktiota?

Oppitunnin kertaus: useDebounce-hook

useDebounce(value, delay)-hook ylläpitää debouncettua tilaa, joka päivittyy vasta, kun delay millisekunnin hiljaisuus on kulunut. Sen useEffect asettaa aikakatkaisun ja tyhjentää sen cleanupissa vanhentuneiden ajastinten peruuttamiseksi. Käyttäkää debouncetettua arvoa API-hakuja suorittavien effectien riippuvuutena. Lisätkää TypeScriptin geneerinen tyyppi täyden tyyppiturvallisuuden saavuttamiseksi.

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 ”Mukautetun useDebounce-hookin toteuttaminen” ilmainen?

Kyllä – oppitunnin ”Mukautetun useDebounce-hookin toteuttaminen” 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 ”Mukautetun useDebounce-hookin toteuttaminen”?

Rakentakaa useDebounce-hook, joka viivästyttää tilapäivityksiä, kunnes käyttäjä lopettaa kirjoittamisen 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 2/4.

Kuinka kauan ”Mukautetun useDebounce-hookin toteuttaminen”-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. Debouncen ja throttlen merkitys käyttöliittymissä
  2. Mukautetun useDebounce-hookin toteuttaminen
  3. Mukautetun useThrottle-hookin toteuttaminen
  4. Käytännön sovellukset: haku, vieritys ja koon muuttaminen
← Takaisin: React Academy