Implementera optimistiska uppdateringar manuellt
Tillämpa optimistiskt tillstånd lokalt, köa mutationen och hantera lyckade och misslyckade fall explicit.
Implementera optimistiska uppdateringar manuellt är en gratis lektion i React Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
Tillståndet före mutationen
Manuella optimistiska uppdateringar börjar med lokalt komponenttillstånd som initieras med data från servern: const [items, setItems] = useState(serverItems). Det är detta lokala tillstånd som renderas och ändras optimistiskt. Du ska INTE ändra data som hämtats från servern direkt – behåll en lokal kopia som du kontrollerar.
Steget med den optimistiska uppdateringen
När användaren utlöser en mutation (genom att klicka på "Add", "Like" eller "Delete") ska tillståndet uppdateras omedelbart innan API:et anropas: setItems(prev => [...prev, newItem]). UI:t återspeglar ändringen direkt. Först efter denna uppdatering skickar du det faktiska nätverksanropet.
Spara det tidigare tillståndet
Innan den optimistiska uppdateringen görs ska det aktuella tillståndet sparas: const previousItems = items. Denna ögonblicksbild är målet för rollback. Om API-anropet misslyckas återställer du detta värde. Lagra det i en variabel, inte i komponenttillståndet, eftersom det bara behövs så länge mutationen väntar på svar.
Gör API-anropet
Efter den optimistiska uppdateringen gör du API-anropet asynkront. Omslut det med try/catch. Vid framgång kan du välja att hämta data igen för att synkronisera med serverns tillstånd, eller lita på det optimistiska tillståndet om servern skulle returnera samma data. Vid fel använder du det sparade tidigare tillståndet för rollback.
Rollback vid fel
I mutationens catch-block: setItems(previousItems). Detta återställer tillståndet till det som gällde före den optimistiska uppdateringen. Följ rollback med en felnotis. Användarna förstår att sällsynta fel inträffar – det de inte accepterar är en tyst inkonsekvens.
Visa en felnotis vid fel
Efter återställningen visas ett felmeddelande: "Kunde inte spara ändringarna. Försök igen." tillsammans med en knapp för Försök igen som utlöser samma mutation på nytt. Detta ger användarna kontroll. Kombinationen av rollback, felnotis och nytt försök hanterar fallet på ett smidigt sätt utan att blockera hela UI:t.
Problemet med tillfälliga ID:n
När ett nytt objekt läggs till optimistiskt har servern ännu inte tilldelat det ett riktigt ID. Skapa ett tillfälligt ID för det optimistiska objektet: const tempId = crypto.randomUUID(). Använd detta som objektets key i listan. När API:et har svarat framgångsrikt ersätter du det tillfälliga ID:t med det riktiga ID:t som servern tilldelade.
Synkronisera tillfälliga ID:n
Efter en lyckad skapandemutation svarar servern med det riktiga ID:t. Uppdatera tillståndet genom att ersätta det tillfälliga objektet: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Denna synkronisering säkerställer att efterföljande åtgärder använder rätt server-ID.
Problemet med kapplöpningstillstånd
Om användaren utlöser två mutationer snabbt efter varandra kan svaren komma i fel ordning. Den andra mutationens svar kan komma före den första mutationens svar, och rollback för den första kan skriva över det korrekta tillståndet från den andra. Detta är en race condition som är unik för optimistiskt UI.
Serialisering av mutationer för att förhindra race conditions
En lösning på race conditions är att serialisera mutationer med hjälp av en kö. Medan en mutation pågår inaktiverar du utlösarknappen genom att sätta state-värdet isSubmitting till true. Tillåt nästa mutation först när den föregående är klar. Det ger något sämre responsivitet, men garanterar korrekt ordningsföljd för state-uppdateringarna.
Mönstret för optimistisk borttagning
För borttagningsoperationer sparar du först de tidigare objekten, filtrerar bort det raderade objektet från state, anropar delete-API:t och gör en rollback vid fel. Borttagning är enklare än skapande (ingen ID-avstämning behövs), men samma principer gäller. Överväg att lägga in en kort fördröjning före borttagningen, så att du kan visa ett alternativ för att ångra innan API-anropet görs.
Tillfälligt ID i optimistiska uppdateringar
Varför behöver optimistiskt tillagda objekt ett tillfälligt ID?
Lektionssammanfattning: manuella optimistiska uppdateringar
Det manuella mönstret är följande: spara previousItems, anropa setItems med det nya state-värdet, gör API-anropet, gör en rollback vid fel med setItems(previousItems) och visa ett felmeddelande. Använd crypto.randomUUID() som tillfälligt ID vid tillägg och ersätt det med serverns ID när anropet lyckas. Förhindra race conditions genom att inaktivera utlösaren medan mutationer pågår. Rollback + toast + nytt försök är standardlösningen för felhantering i användargränssnittet.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”Implementera optimistiska uppdateringar manuellt” gratis?
Ja – hela texten till ”Implementera optimistiska uppdateringar manuellt” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Implementera optimistiska uppdateringar manuellt”?
Tillämpa optimistiskt tillstånd lokalt, köa mutationen och hantera lyckade och misslyckade fall explicit. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Implementera optimistiska uppdateringar manuellt”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Vad är ett optimistiskt gränssnitt och när används det
- Implementera optimistiska uppdateringar manuellt
- Återställning vid fel och konfliktlösning
- Optimistiska mönster med React Query och Zustand