React Academy · Les

Een custom store bouwen met useSyncExternalStore

Implementeer from scratch een lichtgewicht externe store en verbind deze met React via useSyncExternalStore.

Les 4 van 412 stappen

Een custom store bouwen met useSyncExternalStore is een gratis React Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Minimale vereisten voor een store

Een aangepaste store heeft drie dingen nodig: enige status, een subscribe-methode om listeners te registreren en een getSnapshot-methode om de huidige status te lezen. Dat is het volledige contract dat useSyncExternalStore verwacht.

Door de store zo klein te houden blijft deze frameworkonafhankelijk, zodat je dezelfde store binnen en buiten React kunt gebruiken.

Een createStore-fabriek

Een createStore-fabriek neemt een beginwaarde aan en retourneert een object met getSnapshot, subscribe en een update-methode. Intern bewaart de fabriek de huidige status en een verzameling listener-callbacks.

Met dit fabrieks patroon kun je meerdere onafhankelijke stores opzetten met één herbruikbare functie.

De functie update brengt abonnees op de hoogte

Wanneer update de status wijzigt, stelt deze de nieuwe waarde in en roept daarna elke geregistreerde listener aan. Die listeners zijn de callbacks die React via subscribe heeft aangeleverd.

Door ze aan te roepen laat je React weten dat de store is gewijzigd. React leest getSnapshot dan opnieuw en rendert alle componenten die uit de store lezen opnieuw.

Koppelen aan React via de hook

Een component leest uit de store door useSyncExternalStore aan te roepen met de subscribe- en getSnapshot-methoden van de store. De hook retourneert de huidige waarde en rendert het component opnieuw wanneer die verandert.

Je kunt dit verpakken in een aangepaste hook zoals useStore, zodat componenten één functie aanroepen in plaats van telkens zelf de argumenten van de hook te verbinden.

Delen tussen componenten zonder provider

Omdat de store een object op moduleniveau is, deelt elk component dat deze importeert dezelfde status, zonder dat een Context-provider nodig is. Je hoeft geen boomstructuur te omwikkelen en geen props door te geven.

Dit is een belangrijke aantrekkingskracht van externe stores: gedeelde globale status met een eenvoudig model van importeren en gebruiken, in plaats van een providerhiërarchie.

Meerdere stores voor statusdelen

Je kunt meerdere kleine stores maken die elk een deel van de status beheren, in plaats van één monolithische store. Componenten abonneren zich alleen op de statusdelen die ze nodig hebben.

Zo houd je verantwoordelijkheden gescheiden en beperk je nieuwe renders, omdat een wijziging in het ene statusdeel nooit componenten beïnvloedt die uit een ander deel lezen.

Zustand gebruikt dit intern

Zustand, een populaire minimale statusbibliotheek, is precies volgens dit patroon gebouwd en gebruikt sinds versie 4 intern useSyncExternalStore. De kleine API is in wezen een uitgewerkte createStore met een selectielaag.

Als je dit verband ziet, worden zulke bibliotheken minder mysterieus: het zijn dunne, ergonomische omhulsels rond dezelfde primitive die je zelf kunt bouwen.

Alleen opnieuw renderen bij gewijzigde delen

Door een selector aan getSnapshot mee te geven die alleen het deel van de status teruggeeft dat een component gebruikt, zorgt u ervoor dat het component alleen opnieuw wordt gerenderd wanneer dat deel verandert.

Hiervoor is een stabiel selectorresultaat nodig. Memoiseer daarom afgeleide waarden om de oneindige lus door nieuwe referenties te voorkomen en updates toch tot het relevante deel te beperken.

Een Devtools-label voor foutopsporing

Voor foutopsporing kunt u een label aan een store koppelen en updates bijhouden in een logboek, of integratie met browser-DevTools toevoegen zodat u kunt nagaan welke store wanneer is gewijzigd.

Zelfs een eenvoudige consolemelding in update, achter een ontwikkelvlag, helpt u de statusstroom te begrijpen terwijl u de store bouwt.

De store testen binnen en buiten React

Omdat de store uit gewone JavaScript bestaat, kunt u de logica rechtstreeks testen: roep update aan en controleer dat getSnapshot de nieuwe waarde teruggeeft, zonder iets te renderen.

U kunt de store ook binnen React testen door een component te renderen dat de store uitleest en te controleren of er na update opnieuw wordt gerenderd. Zo test u zowel de store als de integratie ervan.

Korte controle: de subscribe-functie van een aangepaste store

Denk aan het contract van de subscribe-methode van een aangepaste store.

Samenvatting: een aangepaste store bouwen

Een aangepaste store heeft status, subscribe en getSnapshot nodig. Een createStore-factory plus een update die luisteraars op de hoogte brengt, levert gedeelde globale status op zonder Provider, omdat imports van modules één instantie delen.

Gebruik meerdere stores voor afzonderlijke delen en selectors om opnieuw renderen te beperken, en let daarbij op stabiele referenties. Zustand v4+ is op exact dit patroon gebaseerd en de store in gewone JavaScript is eenvoudig binnen en buiten React te testen.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Een custom store bouwen met useSyncExternalStore” gratis?

Ja — de volledige tekst van “Een custom store bouwen met useSyncExternalStore” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Een custom store bouwen met useSyncExternalStore”?

Implementeer from scratch een lichtgewicht externe store en verbind deze met React via useSyncExternalStore. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Een custom store bouwen met useSyncExternalStore”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het probleem met subscriptions op externe stores
  2. De useSyncExternalStore-API en parameters
  3. Abonneren op browser-API's
  4. Een custom store bouwen met useSyncExternalStore
← Terug naar React Academy