0Pricing
React Academy · Leçon

Construire un magasin personnalisé avec useSyncExternalStore

Implémentez un magasin externe léger à partir de zéro et connectez-le à React avec useSyncExternalStore.

Construire un magasin personnalisé avec useSyncExternalStore est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Exigences minimales d’une source d’état

Une source d’état personnalisée a besoin de trois éléments : un état, une méthode d’abonnement pour enregistrer les écouteurs et une méthode getSnapshot pour lire l’état actuel. C’est l’intégralité du contrat attendu par useSyncExternalStore.

En gardant la source d’état aussi petite, vous la rendez indépendante de tout cadre logiciel : elle peut être utilisée aussi bien dans React qu’en dehors de React.

Une fabrique createStore

Une fabrique createStore reçoit une valeur initiale et renvoie un objet contenant getSnapshot, la fonction d’abonnement et une fonction de mise à jour. En interne, elle conserve l’état actuel et un ensemble de fonctions de rappel d’écouteurs.

Ce modèle de fabrique vous permet de créer plusieurs sources d’état indépendantes avec une seule fonction réutilisable.

La fonction de mise à jour avertit les abonnés

Lorsque la fonction de mise à jour modifie l’état, elle définit la nouvelle valeur, puis appelle chaque écouteur enregistré. Ces écouteurs sont les fonctions de rappel que React a fournies par l’intermédiaire de la fonction d’abonnement.

Les appeler indique à React que la source d’état a changé, ce qui l’incite à relire getSnapshot et à effectuer un nouveau rendu des composants qui lisent cette source d’état.

Se connecter à React via le crochet

Un composant lit la source d’état en appelant useSyncExternalStore avec les méthodes d’abonnement et getSnapshot de la source d’état. Le crochet renvoie la valeur actuelle et effectue un nouveau rendu lorsqu’elle change.

Vous pouvez encapsuler cela dans un crochet personnalisé comme useStore afin que les composants appellent une seule fonction au lieu de configurer eux-mêmes les arguments du crochet à chaque fois.

Partager entre composants sans fournisseur

Comme la source d’état est un objet situé au niveau du module, tout composant qui l’importe partage le même état, sans fournisseur de contexte. Il n’est nécessaire ni d’envelopper l’arbre ni de transmettre les propriétés en cascade.

C’est un avantage majeur des sources d’état externes : elles offrent un état global partagé avec un modèle simple fondé sur l’importation et l’utilisation, plutôt qu’une hiérarchie de fournisseurs.

Plusieurs sources d’état pour des portions distinctes

Vous pouvez créer plusieurs petites sources d’état, chacune possédant une portion de l’état, plutôt qu’une seule source d’état monolithique. Les composants s’abonnent uniquement aux portions qui les intéressent.

Cela sépare les responsabilités et limite les nouveaux rendus, car la modification d’une portion ne perturbe jamais les composants qui lisent une autre portion.

Zustand l’utilise en interne

Zustand, une bibliothèque populaire et minimaliste de gestion d’état, repose exactement sur ce modèle et utilise useSyncExternalStore en interne depuis la version 4. Sa petite API est essentiellement une fabrique createStore perfectionnée, enrichie d’une couche de sélection.

Comprendre ce lien démystifie ces bibliothèques : ce sont des enveloppes légères et ergonomiques autour de la même primitive que vous pouvez créer vous-même.

Nouveau rendu uniquement lorsque les portions changent

En transmettant à getSnapshot un sélecteur qui ne renvoie que la partie de l’état utilisée par un composant, vous garantissez que celui-ci n’est rendu à nouveau que lorsque cette partie change.

Le résultat du sélecteur doit donc être stable : mémorisez les valeurs dérivées pour éviter la boucle infinie causée par les nouvelles références, tout en limitant les mises à jour à la portion pertinente.

Une étiquette de débogage pour les outils de développement

Pour déboguer, vous pouvez associer une étiquette à un gestionnaire d’état et consigner les mises à jour, ou l’intégrer aux outils de développement du navigateur afin de suivre quel gestionnaire d’état a changé et à quel moment.

Même un simple journal dans la console, placé dans la mise à jour et activé uniquement avec un indicateur de développement, vous aide à comprendre le flux de l’état pendant la création du gestionnaire d’état.

Tester le gestionnaire d’état dans React et en dehors de React

Comme le gestionnaire d’état est du JavaScript simple, vous pouvez tester directement sa logique : appelez la mise à jour et vérifiez que getSnapshot renvoie la nouvelle valeur, sans rien rendre.

Vous pouvez également le tester dans React en affichant un composant qui le lit et en vérifiant qu’un nouveau rendu se produit après la mise à jour, ce qui couvre à la fois le gestionnaire d’état et son intégration.

Vérification rapide : fonction d’abonnement d’un gestionnaire d’état personnalisé

Rappelez-vous le contrat d’une méthode d’abonnement d’un gestionnaire d’état personnalisé.

Récapitulatif : créer un gestionnaire d’état personnalisé

Un gestionnaire d’état personnalisé a besoin d’un état, d’un abonnement et de getSnapshot. Une fabrique createStore, associée à une mise à jour qui informe les écouteurs, fournit un état global partagé sans fournisseur, puisque les importations de modules partagent une même instance.

Utilisez plusieurs gestionnaires d’état correspondant à différentes portions et des sélecteurs pour limiter les nouveaux rendus, en veillant à conserver des références stables. Zustand v4+ repose exactement sur ce modèle, et le gestionnaire d’état en JavaScript simple est facile à tester dans React comme en dehors.

Questions Fréquemment Posées

La leçon « Construire un magasin personnalisé avec useSyncExternalStore » est-elle gratuite ?

Oui — le texte complet de « Construire un magasin personnalisé avec useSyncExternalStore » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Construire un magasin personnalisé avec useSyncExternalStore » ?

Implémentez un magasin externe léger à partir de zéro et connectez-le à React avec useSyncExternalStore. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Construire un magasin personnalisé avec useSyncExternalStore » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le problème des abonnements aux magasins externes
  2. API et paramètres de useSyncExternalStore
  3. S’abonner aux API du navigateur
  4. Construire un magasin personnalisé avec useSyncExternalStore
← Retour à React Academy