Condividere stato e routing tra remoti
Condivida una singola istanza di React Router e uno store Zustand tra microfrontend distribuiti indipendentemente.
Condividere stato e routing tra remoti è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
La sfida della condivisione dello stato
Ogni remote di Module Federation è un'applicazione compilata e distribuita in modo indipendente. Il relativo stato (React useState, Context, store Zustand) vive nel proprio ambito del modulo JavaScript. L'host e i remote non condividono automaticamente lo stato: è necessario progettare esplicitamente questa condivisione.
Opzione 1: l'URL come stato condiviso
Il meccanismo più semplice per condividere lo stato è l'URL: qualsiasi remote può leggere i parametri dell'URL, le stringhe di query e i valori hash senza alcuna comunicazione tra remote. Funziona bene per lo stato della navigazione principale, i valori dei filtri e qualsiasi stato che debba poter essere salvato nei segnalibri e condiviso tramite link.
Opzione 2: CustomEvents per un accoppiamento debole
I CustomEvents, tramite l'EventTarget del browser, consentono ai remote di comunicare senza importazioni dirette. Un remote esegue window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), mentre qualsiasi altro modulo (l'host o altri remote) ascolta con window.addEventListener('cart:updated', handler). Non è necessario alcun modulo condiviso.
Opzione 3: un remote per lo stato condiviso
Crei un "state remote" dedicato che esponga uno store Zustand o Jotai. Sia l'host sia gli altri remote importano da questo state remote e ottengono la stessa istanza dello store, perché si tratta di un singleton condiviso. È una soluzione potente per gli stati condivisi complessi (autenticazione, carrello, preferenze dell'utente), ma aggiunge una dipendenza dalla distribuzione.
Opzione 4: l'host possiede lo stato e passa i callback
La shell (l'host) possiede tutto lo stato condiviso e lo passa ai remote tramite props o Context. I remote ricevono callback come onCartUpdate e navigate come props. In questo modo lo stato rimane centralizzato nell'host, ma l'host deve conoscere le API dei remote, creando un accoppiamento stretto.
React Router in Module Federation
Lo stato di history e location di React Router viene fornito da un componente Router (BrowserRouter o createBrowserRouter). In una configurazione Module Federation deve esserci esattamente un Router: inserirne uno in ogni remote creerebbe più contesti di routing in competizione, causando conflitti di navigazione.
L'host gestisce il Router
La regola architetturale è la seguente: l'host (la shell) fornisce il Router. I remote ricevono dall'host le props di routing (oppure leggono direttamente l'URL). Un remote non deve mai creare il proprio BrowserRouter: entrerebbe in conflitto con il Router dell'host e interromperebbe la navigazione dell'intera applicazione.
Condividere il Context tra i remote
I valori di React Context sono legati a una specifica istanza di React e a un oggetto Context. Perché un Context funzioni tra host e remote, entrambi devono importare lo stesso oggetto Context dalla stessa origine, in genere dal remote dello stato condiviso o da un pacchetto di utility condivise. Il singleton React garantisce che lo stesso Context funzioni in tutti i remote.
Pattern architetturale della shell
In un'architettura Module Federation ben strutturata, la shell (l'host) possiede: la shell HTML, il provider del Router, il contesto Auth, il provider del tema/design token e la navigazione globale. I remote possiedono i contenuti dei rispettivi domini funzionali. La shell compone i remote nel layout senza conoscerne i dettagli di implementazione.
Evitare l'accoppiamento stretto
Il principale antipattern di Module Federation è l'accoppiamento stretto tra host e remote: l'host importa tipi dal remote, il remote importa componenti dall'host oppure entrambi condividono un pacchetto npm che devono aggiornare contemporaneamente. Questi accoppiamenti vanificano lo scopo della distribuzione indipendente.
Contratti di comunicazione
Definisca contratti espliciti tra host e remote: le props accettate da un componente remote, i CustomEvents che invia e i parametri URL che legge. Documenti questi contratti come interfacce TypeScript in un pacchetto di tipi condiviso. In questo modo i team possono evolvere in modo indipendente, rispettando il contratto concordato.
Posizionamento di React Router in Module Federation
Dove deve essere posizionato il provider di React Router (BrowserRouter) in un'architettura Module Federation?
Riepilogo della lezione
La condivisione dello stato tra i remote di Module Federation può usare lo stato nell'URL (la soluzione più semplice), i CustomEvents (con accoppiamento debole), un remote per lo stato condiviso (store centralizzato) oppure lo stato gestito dall'host e passato tramite props. L'host deve gestire l'unico provider del Router: i remote non devono mai crearne uno proprio. Contratti di comunicazione chiari, definiti tramite interfacce TypeScript, mantengono i team indipendenti e consentono una vera distribuzione autonoma.
Domande Frequenti
La lezione «Condividere stato e routing tra remoti» è gratuita?
Sì — il testo completo di «Condividere stato e routing tra remoti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Condividere stato e routing tra remoti»?
Condivida una singola istanza di React Router e uno store Zustand tra microfrontend distribuiti indipendentemente. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Condividere stato e routing tra remoti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Module Federation: import dinamici a runtime
- Configurazione delle app React host e remote
- Condividere stato e routing tra remoti
- Versionamento, distribuzione e orchestrazione