Zustand mit localStorage synchronisieren
Erstellen Sie einen benutzerdefinierten useLocalStorage-Hook, der den React-Zustand bidirektional mit localStorage synchron hält.
Zustand mit localStorage synchronisieren 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 naive Ansatz führt zu inkonsistenten Daten
Der erste Impuls ist oft, localStorage an einer Stelle zu lesen und an einer anderen zu beschreiben. Dadurch können beide auseinanderlaufen. Zustandsaktualisierungen, bei denen das Persistieren vergessen wird, oder persistierte Werte, die sich nicht im Zustand widerspiegeln, führen zu Fehlern.
Sie benötigen eine einzige Quelle der Wahrheit, die den React-Zustand und den Speicher synchron hält.
Der benutzerdefinierte useLocalStorage-Hook
Die saubere Lösung ist ein useLocalStorage-Hook, der useState kapselt und Änderungen automatisch persistiert. Er gibt wie useState einen Wert und einen Setter zurück.
Verwender nutzen ihn genau wie normalen Zustand, erhalten aber die Persistenz automatisch dazu.
Funktion zur verzögerten Initialisierung
Das Lesen aus localStorage ist eine synchrone Operation und sollte daher nicht bei jedem Rendern erfolgen. Übergeben Sie eine Funktion an useState, den sogenannten Lazy Initializer, damit der Lesevorgang nur einmal beim Mounten stattfindet.
In dieser Funktion parsen Sie den gespeicherten Wert oder geben den vorgegebenen Standardwert zurück.
Warum eine verzögerte Initialisierung wichtig ist
Wenn Sie den initialen Zustand direkt als Argument berechnen, wird dieser Ausdruck bei jedem Rendern ausgeführt, obwohl sein Ergebnis nach dem ersten Rendern ignoriert wird. Bei einer Funktion ruft React sie nur einmal auf.
Bei Lesevorgängen aus localStorage vermeiden Sie dadurch bei jedem Rendern synchrone Arbeit im Hauptthread.
Synchronisierung mit useEffect
Um Aktualisierungen zu persistieren, fügen Sie einen useEffect hinzu, der bei jeder Änderung des Werts ausgeführt wird und localStorage.setItem(key, JSON.stringify(value)) aufruft.
Wenn Sie den Wert in das Abhängigkeitsarray aufnehmen, wird jede Zustandsänderung automatisch in den Speicher geschrieben.
Funktionale Aktualisierungen vermeiden veraltete Closures
Wenn Sie den neuen Wert ausgehend vom vorherigen Wert setzen, verwenden Sie die funktionale Form setValue(prev => prev + 1). So vermeiden Sie veraltete Closures, bei denen ein früher erfasster Wert geschrieben würde.
Das ist besonders in Event-Handlern und Effekten wichtig, die möglicherweise einen veralteten Snapshot enthalten.
Umgang mit einem null-Wert im Speicher
getItem gibt null zurück, wenn der Schlüssel nicht existiert. Ihr Initializer muss dies erkennen und stattdessen auf den Standardwert zurückgreifen, anstatt null zu parsen.
Eine Prüfung wie stored != null ? JSON.parse(stored) : defaultValue behandelt den ersten Besuch problemlos.
TypeScript-Generics
In TypeScript machen Sie den Hook generisch: function useLocalStorage<T>(key: string, initial: T). Dadurch bleibt der Werttyp erhalten, sodass Verwender vollständige Typsicherheit erhalten.
Das zurückgegebene Tupel ist als [T, Dispatch<SetStateAction<T>>] typisiert und entspricht damit useState.
Versionierung gespeicherter Daten
Mit der Zeit ändert sich die Struktur Ihrer Daten, und alte gespeicherte Werte können neuen Code beeinträchtigen. Speichern Sie zusammen mit den Daten einen Versionsschlüssel, damit Sie veraltete Formate erkennen können.
Speichern Sie beispielsweise { version: 2, data } und vergleichen Sie die Version beim Lesen.
Löschen bei abweichender Version
Wenn die gespeicherte Version nicht mit der aktuellen übereinstimmt, verwerfen oder migrieren Sie den alten Wert, anstatt ihm zu vertrauen. Die einfachste Strategie besteht darin, den veralteten Eintrag zu entfernen und auf die Standardwerte zurückzugreifen.
So verhindern Sie Abstürze durch Daten, die von einer älteren Version Ihrer App geschrieben wurden.
Den Hook zusammensetzen
Ein vollständiger useLocalStorage-Hook kombiniert einen verzögerten Initializer, der Daten sicher liest und parst, einen Setter, der funktionale Aktualisierungen unterstützt, und einen useEffect, der die Daten mit Versionierung in den Speicher schreibt.
Das Ergebnis ist ein direkter Ersatz für useState, der Reloads übersteht.
Schnelltest
Testen Sie Ihr Verständnis der Zustandsinitialisierung.
Zusammenfassung
Sie haben gelernt, einen useLocalStorage-Hook mit einem verzögerten Initializer zu erstellen, Änderungen über useEffect zu persistieren, funktionale Aktualisierungen zur Vermeidung veralteter Closures zu verwenden und mit null-Werten umzugehen.
Außerdem haben Sie TypeScript-Generics und Versionierung kennengelernt, um veraltete Daten sicher zu löschen.
Häufig gestellte Fragen
Ist die Lektion „Zustand mit localStorage synchronisieren“ kostenlos?
Ja — der vollständige Text von „Zustand mit localStorage synchronisieren“ 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 „Zustand mit localStorage synchronisieren“?
Erstellen Sie einen benutzerdefinierten useLocalStorage-Hook, der den React-Zustand bidirektional mit localStorage synchron hält. 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 „Zustand mit localStorage synchronisieren“?
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
- localStorage in React lesen und schreiben
- Zustand mit localStorage synchronisieren
- Storage-Ereignisse zwischen Tabs verarbeiten
- sessionStorage, IndexedDB und die passende API