React Academy · Oppitunti

Optimististen päivitysten manuaalinen toteuttaminen

Päivittäkää tila optimistisesti paikallisesti, jonottakaa mutaatio ja käsitelkää onnistumis- ja epäonnistumistapaukset eksplisiittisesti

Oppitunti 2/413 vaihetta

Optimististen päivitysten manuaalinen 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.

Tila ennen mutaatiota

Manuaaliset optimistiset päivitykset alkavat palvelimen tiedoista alustetusta paikallisesta komponentin tilasta: const [items, setItems] = useState(serverItems). Tämä paikallinen tila renderöidään, ja sitä muutetaan optimistisesti. Palvelimelta haettuja tietoja EI pidä muuttaa suoraan — säilytä sen sijaan hallinnassasi oleva paikallinen kopio.

Optimistisen päivityksen vaihe

Kun käyttäjä käynnistää mutaation (napauttaa painiketta "Lisää", "Tykkää" tai "Poista"), päivitä tila heti ennen API:n kutsumista: setItems(prev => [...prev, newItem]). Käyttöliittymä näyttää muutoksen välittömästi. Varsinainen verkkopyyntö lähetetään vasta tämän päivityksen jälkeen.

Aiemman tilan tallentaminen

Tallenna nykyinen tila ennen optimistisen päivityksen tekemistä: const previousItems = items. Tämä tilannevedos toimii palautuksen kohteena. Jos API-kutsu epäonnistuu, palauta tämä arvo. Tallenna se muuttujaan, älä tilaan, koska tarvitset sitä vain odottavan mutaation ajan.

API-kutsun tekeminen

Tee API-kutsu optimistisen päivityksen jälkeen asynkronisesti. Käytä sen ympärillä try/catch-rakennetta. Onnistumisen jälkeen voit halutessasi hakea tiedot uudelleen palvelimen tilan kanssa synkronoimiseksi tai luottaa optimistiseen tilaan, jos palvelin palauttaisi samat tiedot. Virheen sattuessa palauta tila tallennetun aiemman tilan avulla.

Palautus virheen jälkeen

Lisää mutaation catch-lohkoon: setItems(previousItems). Tämä palauttaa tilan optimistista päivitystä edeltäneeseen muotoon. Näytä palautuksen jälkeen virheilmoitus. Käyttäjät ymmärtävät, että harvinaisia virheitä tapahtuu — mutta he eivät hyväksy hiljaista epäjohdonmukaisuutta.

Virhetoastin näyttäminen virheen jälkeen

Näytä palautuksen jälkeen virheilmoitus: "Muutoksia ei voitu tallentaa. Yritä uudelleen." Lisää mukaan Uudelleenyritys-painike, joka käynnistää saman mutaation uudelleen. Näin käyttäjä voi itse vaikuttaa tilanteeseen. Palautuksen, virhetoastin ja uudelleenyrityksen yhdistelmä käsittelee virhetilanteen hallitusti estämättä koko käyttöliittymää.

Väliaikaisen tunnisteen ongelma

Kun lisäät uuden kohteen optimistisesti, palvelin ei ole vielä antanut sille oikeaa tunnistetta. Luo optimistiselle kohteelle väliaikainen tunniste: const tempId = crypto.randomUUID(). Käytä sitä kohteen avaimena luettelossa. Kun API vastaa onnistuneesti, korvaa väliaikainen tunniste palvelimen antamalla oikealla tunnisteella.

Väliaikaisten tunnisteiden yhteensovittaminen

Onnistuneen luontimutaation jälkeen palvelin palauttaa oikean tunnisteen. Päivitä tila ja korvaa väliaikainen kohde: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Tämän yhteensovittamisen ansiosta myöhemmät toiminnot käyttävät oikeaa palvelimen tunnistetta.

Kilpailutilanteen ongelma

Jos käyttäjä käynnistää kaksi mutaatiota nopeasti peräkkäin, vastaukset voivat saapua eri järjestyksessä kuin pyynnöt. Toisen mutaation vastaus voi saapua ennen ensimmäistä, jolloin ensimmäisen mutaation palautus saattaa korvata toisen mutaation tuottaman oikean tilan. Tämä on optimistiselle käyttöliittymälle ominainen kilpailutilanne.

Mutaatioiden suorittaminen järjestyksessä kilpailutilanteiden estämiseksi

Yksi ratkaisu kilpailutilanteisiin on suorittaa mutaatiot järjestyksessä jonon avulla. Kun mutaatio on käynnissä, poistakaa laukaisupainike käytöstä (asettamalla isSubmitting-tilan arvoksi true). Sallikaa seuraava mutaatio vasta, kun edellinen on valmis. Tämä heikentää hieman käyttöliittymän reagointinopeutta, mutta takaa tilan oikean järjestyksen.

Optimistinen poistokuvio

Poistotoiminnoissa tallentakaa aiemmat kohteet, suodattakaa poistettava kohde pois tilasta, kutsukaa poisto-APIa ja palauttakaa tila virheen sattuessa. Poistaminen on luomista yksinkertaisempaa (tunnisteita ei tarvitse sovittaa yhteen), mutta samat periaatteet pätevät. Harkitkaa lyhyen viiveen lisäämistä ennen poistamista (näyttäkää "kumoa"-vaihtoehto) ennen API-kutsun tekemistä.

Väliaikainen tunniste optimistisissa päivityksissä

Miksi optimistisesti lisätyt kohteet tarvitsevat väliaikaisen tunnisteen?

Oppitunnin yhteenveto: manuaaliset optimistiset päivitykset

Manuaalinen toimintamalli: tallentakaa previousItems, asettakaa uusi tila setItems-kutsulla, tehkää API-kutsu, palauttakaa tila virheen sattuessa komennolla setItems(previousItems) ja näyttäkää virheilmoitus. Käyttäkää lisäyksissä crypto.randomUUID()-funktiota väliaikaisena tunnisteena ja sovittakaa se palvelimen tunnisteen kanssa yhteen onnistumisen jälkeen. Estäkää kilpailutilanteet poistamalla laukaisin käytöstä mutaatioiden ollessa käynnissä. Palautus + toast-ilmoitus + uudelleenyritys on vakiintunut tapa käsitellä virheitä käyttöliittymässä.

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 ”Optimististen päivitysten manuaalinen toteuttaminen” ilmainen?

Kyllä – oppitunnin ”Optimististen päivitysten manuaalinen 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 ”Optimististen päivitysten manuaalinen toteuttaminen”?

Päivittäkää tila optimistisesti paikallisesti, jonottakaa mutaatio ja käsitelkää onnistumis- ja epäonnistumistapaukset eksplisiittisesti 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 ”Optimististen päivitysten manuaalinen 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. Mitä optimistinen käyttöliittymä on ja milloin sitä käytetään
  2. Optimististen päivitysten manuaalinen toteuttaminen
  3. Virheestä palautuminen ja ristiriitojen ratkaiseminen
  4. Optimistiset mallit React Querylla ja Zustandilla
← Takaisin: React Academy