Manuel implementering af optimistiske opdateringer
Anvend optimistisk tilstand lokalt, sæt mutationen i kø, og håndtér succes- og fejlsituationer eksplicit.
Manuel implementering af optimistiske opdateringer er en gratis React Academy-lektion på CoddyKit. Dette er lektion 2 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.
Tilstanden før ændringen
Manuelle optimistiske opdateringer begynder med lokal komponenttilstand, der initialiseres fra data fra serveren: const [items, setItems] = useState(serverItems). Det er denne lokale tilstand, du viser, og som du ændrer optimistisk. Du må IKKE ændre data, der er hentet fra serveren, direkte – behold en lokal kopi, som du selv styrer.
Trinnet med den optimistiske opdatering
Når brugeren udløser en ændring (ved at trykke på "Tilføj", "Synes godt om" eller "Slet"), skal du udføre tilstandsopdateringen med det samme, før du kalder API'et: setItems(prev => [...prev, newItem]). Brugerfladen afspejler ændringen øjeblikkeligt. Først efter denne opdatering sender du den faktiske netværksanmodning.
Gem den tidligere tilstand
Før du foretager den optimistiske opdatering, skal du gemme den aktuelle tilstand: const previousItems = items. Dette øjebliksbillede er dit mål for tilbagerulningen. Hvis API-kaldet mislykkes, gendanner du denne værdi. Gem den i en variabel (ikke i tilstanden), fordi du kun har brug for den, mens den afventende ændring behandles.
Foretag API-kaldet
Efter den optimistiske opdatering skal du foretage API-kaldet asynkront. Pak det ind i try/catch. Hvis det lykkes, kan du valgfrit hente data igen for at synkronisere med serverens tilstand, eller stole på den optimistiske tilstand, hvis serveren ville returnere de samme data. Hvis det mislykkes, skal du bruge den gemte tidligere tilstand til tilbagerulning.
Rul tilbage ved fejl
I catch-blokken for din ændring skal du skrive: setItems(previousItems). Det gendanner tilstanden til det, den var, før den optimistiske opdatering blev foretaget. Følg tilbagerulningen op med en fejlmeddelelse. Brugerne forstår, at sjældne fejl forekommer – men de kan ikke acceptere en uopdaget uoverensstemmelse.
Vis en fejl-toast ved fejl
Efter tilbagerulningen skal du vise en fejlmeddelelse: "Kunne ikke gemme ændringerne. Prøv igen." med en Prøv igen-knap, der udløser den samme ændring igen. Det giver brugerne mulighed for selv at handle. Kombinationen af tilbagerulning, fejl-toast og mulighed for at prøve igen håndterer fejlsituationen på en god måde uden at blokere hele brugerfladen.
Problemet med det midlertidige id
Når du optimistisk tilføjer et nyt element, har serveren endnu ikke tildelt det et rigtigt id. Opret et midlertidigt id til det optimistiske element: const tempId = crypto.randomUUID(). Brug det som elementets nøgle på listen. Når API'et svarer med succes, skal du erstatte det midlertidige id med det rigtige id, som serveren har tildelt.
Afstemning af midlertidige id'er
Efter en vellykket oprettelse svarer serveren med det rigtige id. Opdatér tilstanden, så det midlertidige element erstattes: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Denne afstemning sikrer, at efterfølgende handlinger bruger det korrekte id fra serveren.
Problemet med kapløbsbetingelser
Hvis brugeren udløser to ændringer hurtigt efter hinanden, kan svarene komme i forkert rækkefølge. Svaret på den anden ændring kan komme før svaret på den første, og tilbagerulningen af den første kan overskrive den korrekte tilstand fra den anden. Dette er et kapløbsproblem, der er særligt for optimistisk UI.
Serialisering af mutationer for at forhindre kapløbstilstande
Én løsning på kapløbstilstande er at serialisere mutationer ved hjælp af en kø. Mens en mutation er under behandling, deaktiverer du udløserknappen (ved at sætte tilstanden isSubmitting til true). Tillad kun den næste mutation, når den forrige er færdig. Det gør løsningen mindre responsiv, men garanterer korrekt rækkefølge for tilstandsændringerne.
Mønsteret for optimistisk sletning
Ved slettehandlinger: gem de tidligere elementer, filtrer det slettede element fra tilstanden, kald slette-API'et, og gendan tilstanden ved fejl. Sletning er enklere end oprettelse (ingen ID-afstemning), men de samme principper gælder. Overvej at tilføje en kort forsinkelse før sletningen (så der vises en "fortryd"-mulighed), inden API-kaldet foretages.
Midlertidigt ID i optimistiske opdateringer
Hvorfor skal optimistisk tilføjede elementer have et midlertidigt ID?
Lektionsopsamling: Manuelle optimistiske opdateringer
Det manuelle mønster: Gem previousItems, sæt den nye tilstand med setItems, foretag API-kaldet, rull tilbage ved fejl med setItems(previousItems), og vis en fejlmeddelelse. Ved tilføjelser skal du bruge crypto.randomUUID() som et midlertidigt ID og afstemme det med serverens ID ved succes. Forebyg kapløbstilstande ved at deaktivere udløseren, mens mutationer er under behandling. Tilbageføring, besked og gentagelse er den almindelige brugeroplevelse ved fejl.
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 “Manuel implementering af optimistiske opdateringer” gratis?
Ja — hele teksten til “Manuel implementering af optimistiske opdateringer” 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 “Manuel implementering af optimistiske opdateringer”?
Anvend optimistisk tilstand lokalt, sæt mutationen i kø, og håndtér succes- og fejlsituationer eksplicit. 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 2 af 4.
Hvor lang tid tager lektionen “Manuel implementering af optimistiske opdateringer”?
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
- Hvad er optimistisk brugergrænseflade, og hvornår bruges det
- Manuel implementering af optimistiske opdateringer
- Tilbagerulning ved fejl og konfliktløsning
- Optimistiske mønstre med React Query og Zustand