Optimistische Aktualisierungen manuell implementieren
Den Zustand lokal optimistisch aktualisieren, die Mutation in eine Warteschlange einreihen und Erfolgs- und Fehlerfälle ausdrücklich behandeln
Optimistische Aktualisierungen manuell implementieren ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Der Zustand vor der Mutation
Manuelle optimistische Aktualisierungen beginnen mit einem lokalen Komponentenstatus, der mit Serverdaten initialisiert wird: const [items, setItems] = useState(serverItems). Diesen lokalen Status rendern Sie und ändern ihn optimistisch. Sie sollten NICHT direkt an vom Server abgerufenen Daten arbeiten – behalten Sie stattdessen eine lokale Kopie, die Sie kontrollieren.
Der Schritt der optimistischen Aktualisierung
Wenn der Benutzer eine Mutation auslöst (durch Klicken auf „Hinzufügen“, „Gefällt mir“ oder „Löschen“), aktualisieren Sie den Status sofort, bevor Sie die API aufrufen: setItems(prev => [...prev, newItem]). Die Benutzeroberfläche spiegelt die Änderung sofort wider. Erst danach senden Sie die eigentliche Netzwerkanfrage.
Den vorherigen Zustand erfassen
Erfassen Sie vor der optimistischen Aktualisierung den aktuellen Status: const previousItems = items. Dieser Snapshot ist Ihr Rollback-Ziel. Wenn der API-Aufruf fehlschlägt, stellen Sie diesen Wert wieder her. Speichern Sie ihn in einer Variablen und nicht im Status, da Sie ihn nur für die Dauer der ausstehenden Mutation benötigen.
Den API-Aufruf durchführen
Führen Sie nach der optimistischen Aktualisierung den API-Aufruf asynchron aus. Umschließen Sie ihn mit try/catch. Bei Erfolg können Sie optional die Daten erneut abrufen, um sie mit dem Serverstatus abzugleichen, oder dem optimistischen Status vertrauen, wenn der Server dieselben Daten zurückgeben würde. Bei einem Fehler verwenden Sie den erfassten vorherigen Status für den Rollback.
Rollback bei einem Fehler
Rufen Sie im catch-Block Ihrer Mutation Folgendes auf: setItems(previousItems). Dadurch wird der Status auf den Zustand vor der optimistischen Aktualisierung zurückgesetzt. Zeigen Sie anschließend eine Fehlermeldung an. Benutzer verstehen, dass seltene Fehler vorkommen – was sie nicht akzeptieren können, ist eine unbemerkte Inkonsistenz.
Fehler-Toast bei einem Fehler anzeigen
Zeigen Sie nach dem Rollback eine Fehlermeldung an: „Die Änderungen konnten nicht gespeichert werden. Bitte versuchen Sie es erneut.“ Fügen Sie eine Schaltfläche „Erneut versuchen“ hinzu, die dieselbe Mutation erneut ausführt. Dadurch behalten die Benutzer die Kontrolle. Die Kombination aus Rollback, Fehler-Toast und erneuter Ausführung behandelt den Fehlerfall angemessen, ohne die gesamte Benutzeroberfläche zu blockieren.
Das Problem mit temporären IDs
Beim optimistischen Hinzufügen eines neuen Elements hat der Server noch keine echte ID vergeben. Erstellen Sie für das optimistische Element eine temporäre ID: const tempId = crypto.randomUUID(). Verwenden Sie diese als Schlüssel des Elements in der Liste. Nach einer erfolgreichen Antwort der API ersetzen Sie die temporäre ID durch die vom Server vergebene echte ID.
Temporäre IDs abgleichen
Nach einer erfolgreichen Mutation zum Erstellen eines Elements antwortet der Server mit der echten ID. Aktualisieren Sie Ihren Status, um das temporäre Element zu ersetzen: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Dieser Abgleich stellt sicher, dass nachfolgende Vorgänge die korrekte Server-ID verwenden.
Das Problem mit Race Conditions
Wenn der Benutzer zwei Mutationen in kurzer Folge auslöst, können die Antworten in einer anderen Reihenfolge eintreffen. Die Antwort der zweiten Mutation kann vor der ersten eintreffen, und der Rollback der ersten Mutation könnte den korrekten Status der zweiten Mutation überschreiben. Dies ist eine Race Condition, die speziell bei Optimistic UI auftreten kann.
Mutationen serialisieren, um Race Conditions zu verhindern
Eine Lösung für Race Conditions: Serialisieren Sie Mutationen mithilfe einer Warteschlange. Deaktivieren Sie die Auslöseschaltfläche, solange eine Mutation läuft (indem Sie den Zustand isSubmitting auf true setzen). Lassen Sie die nächste Mutation erst zu, wenn die vorherige abgeschlossen ist. Dadurch wird die Reaktionsfähigkeit etwas eingeschränkt, aber die korrekte Reihenfolge der Zustandsänderungen garantiert.
Muster für optimistisches Löschen
Für Löschvorgänge: Speichern Sie die vorherigen Elemente, entfernen Sie das gelöschte Element aus dem Zustand, rufen Sie die Delete-API auf und stellen Sie den vorherigen Zustand bei einem Fehler wieder her. Das Löschen ist einfacher als das Erstellen (es ist keine ID-Zuordnung erforderlich), aber dieselben Prinzipien gelten. Erwägen Sie, vor dem API-Aufruf eine kurze Verzögerung einzubauen und dabei eine Option zum "Rückgängig machen" anzuzeigen.
Temporäre ID bei optimistischen Aktualisierungen
Warum benötigen optimistisch hinzugefügte Elemente eine temporäre ID?
Lektion zusammengefasst: Manuelle optimistische Aktualisierungen
Das manuelle Muster: Erfassen Sie previousItems, setzen Sie mit setItems den neuen Zustand, führen Sie den API-Aufruf aus, stellen Sie bei einem Fehler mit setItems(previousItems) den vorherigen Zustand wieder her und zeigen Sie einen Fehler an. Verwenden Sie für neue Elemente crypto.randomUUID() als temporäre ID und gleichen Sie sie bei Erfolg mit der Server-ID ab. Verhindern Sie Race Conditions, indem Sie die Auslöseaktion während laufender Mutationen deaktivieren. Rollback + Toast + Wiederholen ist das Standardverhalten der Benutzeroberfläche bei Fehlern.
Häufig gestellte Fragen
Ist die Lektion „Optimistische Aktualisierungen manuell implementieren“ kostenlos?
Ja — der vollständige Text von „Optimistische Aktualisierungen manuell implementieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Optimistische Aktualisierungen manuell implementieren“?
Den Zustand lokal optimistisch aktualisieren, die Mutation in eine Warteschlange einreihen und Erfolgs- und Fehlerfälle ausdrücklich behandeln Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um React Academy zu starten?
Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Optimistische Aktualisierungen manuell implementieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?
Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was ist Optimistic UI und wann wird sie eingesetzt
- Optimistische Aktualisierungen manuell implementieren
- Bei Fehlern zurücksetzen und Konflikte lösen
- Optimistische Muster mit React Query und Zustand