Partager l’état et le routage entre applications distantes
Partagez une seule instance de React Router et un magasin Zustand entre des microapplications déployées indépendamment.
Partager l’état et le routage entre applications distantes est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Le défi du partage d’état
Chaque application distante de Module Federation est compilée et déployée indépendamment. Son état (useState de React, contexte et gestionnaires d’état Zustand) vit dans sa propre portée de module JavaScript. L’hôte et les applications distantes ne partagent pas automatiquement leur état : vous devez concevoir explicitement ce partage.
Option 1 : l’URL comme état partagé
Le mécanisme de partage d’état le plus simple est l’URL : toute application distante peut lire les paramètres d’URL, les chaînes de requête et les valeurs de fragment sans aucune communication entre applications distantes. Cette méthode convient bien à l’état principal de la navigation, aux valeurs des filtres et à tout état qui doit pouvoir être ajouté aux favoris et partagé par lien.
Option 2 : CustomEvents pour un couplage faible
CustomEvents, via EventTarget du navigateur, permettent aux applications distantes de communiquer sans importations directes. Une application distante exécute window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), et tout autre module (l’hôte ou une autre application distante) écoute avec window.addEventListener('cart:updated', handler). Aucun module partagé n’est nécessaire.
Option 3 : une application distante d’état partagé
Créez une application distante dédiée à l’état qui expose un gestionnaire d’état Zustand ou Jotai. L’hôte et les autres applications distantes l’importent depuis cette application distante et obtiennent la même instance du gestionnaire, puisqu’il s’agit d’un singleton partagé. Cette solution est puissante pour les états complexes partagés (authentification, panier, préférences utilisateur), mais elle ajoute une dépendance de déploiement.
Option 4 : l’hôte possède l’état et transmet des fonctions de rappel
Le conteneur (hôte) possède tout l’état partagé et le transmet aux applications distantes sous forme de propriétés ou via le contexte. Les applications distantes reçoivent des fonctions de rappel comme onCartUpdate et la navigation sous forme de propriétés. Cela centralise l’état dans l’hôte, mais oblige celui-ci à connaître les interfaces des applications distantes, ce qui crée un couplage fort.
React Router dans Module Federation
L’historique et l’état de l’emplacement de React Router sont fournis par un composant de routeur (BrowserRouter ou createBrowserRouter). Une architecture Module Federation doit contenir exactement un routeur : en placer un dans chaque application distante créerait plusieurs contextes de routage concurrents et provoquerait des conflits de navigation.
L’hôte possède le routeur
La règle architecturale est la suivante : l’hôte (le conteneur) fournit le routeur. Les applications distantes reçoivent les propriétés de routage de l’hôte ou lisent directement l’URL. Une application distante ne doit jamais créer son propre BrowserRouter : cela entrerait en conflit avec le routeur de l’hôte et interromprait la navigation de toute l’application.
Partage du contexte entre applications distantes
Les valeurs du contexte React sont liées à une instance React et à un objet de contexte spécifiques. Pour qu’un contexte fonctionne entre l’hôte et une application distante, les deux doivent importer le même objet de contexte depuis la même source, généralement l’application distante d’état partagé ou un paquet d’utilitaires partagé. L’instance unique de React garantit que le même contexte fonctionne dans toutes les applications distantes.
Modèle d’architecture du conteneur
Dans une architecture Module Federation claire, le conteneur (hôte) possède : la structure HTML, le fournisseur du routeur, le contexte d’authentification, le fournisseur du thème et des jetons de conception, ainsi que la navigation globale. Les applications distantes possèdent le contenu de leur domaine fonctionnel. Le conteneur compose les applications distantes dans la mise en page sans connaître les détails de leur implémentation.
Éviter le couplage fort
Le principal anti-modèle de Module Federation est le couplage fort entre l’hôte et les applications distantes : l’hôte importe des types depuis une application distante, l’application distante importe des composants depuis l’hôte ou les deux partagent un paquet npm commun qu’ils doivent mettre à jour simultanément. Ces couplages vont à l’encontre de l’objectif du déploiement indépendant.
Contrats de communication
Définissez des contrats explicites entre l’hôte et les applications distantes : les propriétés qu’un composant distant accepte, les CustomEvents qu’il distribue et les paramètres d’URL qu’il lit. Documentez ces contrats sous forme d’interfaces TypeScript dans un paquet de types partagé. Les équipes peuvent ainsi évoluer indépendamment dans le cadre du contrat convenu.
Emplacement de React Router dans Module Federation
Où faut-il placer le fournisseur de React Router (BrowserRouter) dans une architecture Module Federation ?
Récapitulatif de la leçon
Le partage d’état entre les applications distantes de Module Federation peut utiliser l’état de l’URL (solution la plus simple), les CustomEvents (couplage faible), une application distante d’état partagé (gestionnaire centralisé) ou un état géré par l’hôte et transmis sous forme de propriétés. L’hôte doit posséder l’unique fournisseur du routeur : les applications distantes ne doivent jamais créer le leur. Des contrats de communication clairs, définis par des interfaces TypeScript, maintiennent l’indépendance des équipes et permettent un véritable déploiement indépendant.
Questions Fréquemment Posées
La leçon « Partager l’état et le routage entre applications distantes » est-elle gratuite ?
Oui — le texte complet de « Partager l’état et le routage entre applications distantes » 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 « Partager l’état et le routage entre applications distantes » ?
Partagez une seule instance de React Router et un magasin Zustand entre des microapplications déployées indépendamment. 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 3 sur 4.
Combien de temps prend la leçon « Partager l’état et le routage entre applications distantes » ?
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
- Fédération de modules : imports dynamiques à l’exécution
- Configurer les applications React hôte et distantes
- Partager l’état et le routage entre applications distantes
- Gestion des versions, déploiement et orchestration