Einen eigenen Store mit useSyncExternalStore erstellen
Implementieren Sie einen schlanken externen Store von Grund auf und verbinden Sie ihn mit React über useSyncExternalStore.
Einen eigenen Store mit useSyncExternalStore erstellen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Anforderungen an einen minimalen Store
Ein benutzerdefinierter Store benötigt drei Dinge: einen Zustand, eine subscribe-Methode zum Registrieren von Listenern und eine getSnapshot-Methode zum Lesen des aktuellen Zustands. Das ist der vollständige Vertrag, den useSyncExternalStore erwartet.
Wenn der Store so klein bleibt, ist er frameworkunabhängig, sodass derselbe Store innerhalb oder außerhalb von React verwendet werden kann.
Eine createStore-Factory
Eine createStore-Factory nimmt einen Initialwert entgegen und gibt ein Objekt mit getSnapshot, subscribe und einer update-Methode zurück. Intern verwaltet sie den aktuellen Zustand und eine Menge von Listener-Callbacks.
Mit diesem Factory-Muster können Sie über eine einzige wiederverwendbare Funktion mehrere unabhängige Stores erstellen.
Die update-Funktion benachrichtigt Subscriber
Wenn update den Zustand ändert, setzt die Funktion den neuen Wert und ruft anschließend jeden registrierten Listener auf. Diese Listener sind die Callbacks, die React über subscribe bereitgestellt hat.
Ihr Aufruf teilt React mit, dass sich der Store geändert hat. Daraufhin liest React getSnapshot erneut und rendert alle Komponenten neu, die aus dem Store lesen.
Über den Hook mit React verbinden
Eine Komponente liest aus dem Store, indem sie useSyncExternalStore mit den subscribe- und getSnapshot-Methoden des Stores aufruft. Der Hook gibt den aktuellen Wert zurück und rendert die Komponente bei Änderungen neu.
Sie können dies in einem benutzerdefinierten Hook wie useStore kapseln, sodass Komponenten nur eine Funktion aufrufen müssen, statt die Hook-Argumente jedes Mal selbst zu verbinden.
Über Komponenten hinweg teilen – ohne Provider
Da der Store ein Objekt auf Modulebene ist, verwendet jede Komponente, die ihn importiert, denselben Zustand; ein Context Provider ist nicht erforderlich. Es gibt keinen Komponentenbaum, den Sie umschließen müssen, und kein Prop Drilling.
Das ist ein wesentlicher Vorteil externer Stores: gemeinsam genutzter globaler Zustand mit einem einfachen Import-und-Verwenden-Modell statt einer Provider-Hierarchie.
Mehrere Stores für State-Slices
Sie können anstelle eines monolithischen Stores mehrere kleine Stores erstellen, die jeweils einen State-Slice verwalten. Komponenten abonnieren nur die Slices, die sie benötigen.
Dadurch bleiben Zuständigkeiten getrennt und erneute Render-Vorgänge werden begrenzt, da die Änderung eines Slices niemals Komponenten beeinflusst, die aus einem anderen Slice lesen.
Zustand verwendet es intern
Zustand, eine beliebte minimalistische State-Management-Bibliothek, basiert genau auf diesem Muster und verwendet seit Version 4 intern useSyncExternalStore. Ihre kleine API ist im Wesentlichen eine ausgefeilte createStore-Implementierung mit einer Selektorschicht.
Wenn Sie diesen Zusammenhang erkennen, verlieren solche Bibliotheken ihren mystischen Charakter: Sie sind schlanke, ergonomische Wrapper über dasselbe Primitiv, das Sie selbst erstellen können.
Nur bei geänderten Slices neu rendern
Indem Sie an getSnapshot einen Selector übergeben, der nur den von einer Komponente verwendeten Teil des State zurückgibt, stellen Sie sicher, dass die Komponente nur dann neu gerendert wird, wenn sich dieser Teil ändert.
Dafür ist ein stabiles Ergebnis des Selectors erforderlich. Memorisieren Sie daher abgeleitete Werte, um die durch neue Referenzen verursachte Endlosschleife zu vermeiden und Updates weiterhin auf den relevanten Slice zu begrenzen.
Ein Devtools-Debug-Label
Zum Debuggen können Sie einem Store ein Label zuweisen und Updates protokollieren oder ihn in Browser-Devtools integrieren, sodass Sie nachvollziehen können, welcher Store sich wann geändert hat.
Schon ein einfaches console.log innerhalb von update, das über ein Development-Flag aktiviert wird, hilft Ihnen dabei, den State-Fluss beim Erstellen des Stores zu verstehen.
Den Store innerhalb und außerhalb von React testen
Da der Store aus einfachem JavaScript besteht, können Sie seine Logik direkt testen: Rufen Sie update auf und prüfen Sie, ob getSnapshot den neuen Wert zurückgibt, ohne etwas zu rendern.
Sie können ihn auch innerhalb von React testen, indem Sie eine Komponente rendern, die daraus liest, und überprüfen, ob nach update ein erneutes Rendern erfolgt. So decken Sie sowohl den Store als auch seine Integration ab.
Schnelltest: subscribe-Funktion eines benutzerdefinierten Stores
Rufen Sie sich den Vertrag der subscribe-Methode eines benutzerdefinierten Stores ins Gedächtnis.
Zusammenfassung: Einen benutzerdefinierten Store erstellen
Ein benutzerdefinierter Store benötigt State, subscribe und getSnapshot. Eine createStore-Factory sowie ein update, das Listener benachrichtigt, stellen gemeinsamen globalen State ohne Provider bereit, da Modulimporte dieselbe Instanz verwenden.
Verwenden Sie mehrere Slice-Stores und Selector, um erneute Renderings zu begrenzen, und achten Sie dabei auf stabile Referenzen. Zustand v4+ basiert genau auf diesem Muster, und der Store in einfachem JavaScript lässt sich innerhalb und außerhalb von React leicht testen.
Lerne React mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 88
- Lektionen
- 324
Häufig gestellte Fragen
Ist die Lektion „Einen eigenen Store mit useSyncExternalStore erstellen“ kostenlos?
Ja — der vollständige Text von „Einen eigenen Store mit useSyncExternalStore erstellen“ 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 „Einen eigenen Store mit useSyncExternalStore erstellen“?
Implementieren Sie einen schlanken externen Store von Grund auf und verbinden Sie ihn mit React über useSyncExternalStore. 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 4 von 4.
Wie lange dauert die Lektion „Einen eigenen Store mit useSyncExternalStore erstellen“?
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
- Das Problem bei Subscriptions auf externe Stores
- useSyncExternalStore: API und Parameter
- Subscriptions auf Browser-APIs
- Einen eigenen Store mit useSyncExternalStore erstellen