Dela tillstånd och routning mellan remotes
Dela en enda React Router-instans och Zustand-store mellan oberoende distribuerade mikropresentationer.
Dela tillstånd och routning mellan remotes är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
Utmaningen med att dela tillstånd
Varje Module Federation-remote är en applikation som byggs och distribueras självständigt. Dess tillstånd (React useState, Context och Zustand stores) finns i dess eget JavaScript-modulscope. Host och remotes delar inte automatiskt tillstånd – du måste utforma delningen uttryckligen.
Alternativ 1: URL:en som delat tillstånd
Den enklaste mekanismen för att dela tillstånd är URL:en: alla remotes kan läsa URL-parametrar, frågesträngar och hashvärden utan kommunikation mellan remotes. Det fungerar bra för huvudnavigeringens tillstånd, filtervärden och allt tillstånd som ska kunna bokmärkas och delas via en länk.
Alternativ 2: CustomEvents för lös koppling
CustomEvents via webbläsarens EventTarget gör att remotes kan kommunicera utan direkta importer. En remote skickar ut window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), och alla andra moduler (host eller andra remotes) lyssnar med window.addEventListener('cart:updated', handler). Ingen delad modul behövs.
Alternativ 3: En remote för delat tillstånd
Skapa en särskild ”state remote” som exponerar en Zustand- eller Jotai-store. Både hosten och andra remotes importerar från denna state remote och får samma store-instans – eftersom den är en delad singleton. Det är kraftfullt för komplext delat tillstånd (autentisering, varukorg och användarinställningar), men lägger till ett distributionsberoende.
Alternativ 4: Hosten äger tillståndet och skickar callback-funktioner
Skalet (hosten) äger allt delat tillstånd och skickar det vidare till remotes som props eller via Context. Remotes tar emot callback-funktioner som onCartUpdate och navigate som props. Det håller tillståndet centraliserat i hosten, men kräver att hosten känner till remotes API:er – vilket skapar en tät koppling.
React Router i Module Federation
React Routers historik- och location-tillstånd tillhandahålls av en Router-komponent (BrowserRouter eller createBrowserRouter). Det måste finnas exakt en Router i en Module Federation-konfiguration – om varje remote placerar ut en egen Router skapas flera konkurrerande routingkontexter, vilket leder till navigeringskonflikter.
Hosten äger routern
Den arkitektoniska regeln är: hosten (skalet) tillhandahåller routern. Remotes tar emot routingprops från hosten (eller läser direkt från URL:en). En remote ska aldrig skapa en egen BrowserRouter – den skulle hamna i konflikt med hostens Router och förstöra navigeringen i hela applikationen.
Dela Context mellan remotes
React Context-värden är kopplade till en specifik React-instans och ett specifikt Context-objekt. För att en Context ska fungera mellan host och remote måste båda importera samma Context-objekt från samma källa – vanligtvis den delade state remoten eller ett delat verktygspaket. React-singletonen säkerställer att samma Context fungerar i alla remotes.
Mönster för skalarkitektur
I en ren Module Federation-arkitektur äger skalet (hosten) HTML-skalet, Router-providern, Auth-contexten, providern för tema och design tokens samt den globala navigeringen. Remotes äger innehållet i sina respektive funktionsområden. Skalet sammanfogar remotes i layouten utan att känna till deras implementeringsdetaljer.
Undvik täta kopplingar
Det största antipatternet i Module Federation är en tät koppling mellan host och remotes: hosten importerar typer från remoten, remoten importerar komponenter från hosten eller så delar de ett gemensamt npm-paket som båda måste uppdatera samtidigt. Dessa kopplingar motverkar syftet med självständig distribution.
Kommunikationskontrakt
Definiera uttryckliga kontrakt mellan host och remotes: vilka props en remote-komponent accepterar, vilka CustomEvents den skickar ut och vilka URL-parametrar den läser. Dokumentera dessa kontrakt som TypeScript-gränssnitt i ett delat types-paket. Då kan teamen utvecklas självständigt inom det överenskomna kontraktet.
Placering av React Router i Module Federation
Var bör React Router-providern (BrowserRouter) placeras i en Module Federation-arkitektur?
Sammanfattning av lektionen
Delning av tillstånd mellan Module Federation-remotes kan använda URL-tillstånd (enklast), CustomEvents (löst kopplade), en shared state remote (centraliserad store) eller tillstånd som hosten äger och skickar som props. Hosten måste äga den enda Router-providern – remotes ska aldrig skapa egna. Tydliga kommunikationskontrakt via TypeScript-gränssnitt håller teamen löst kopplade och möjliggör verkligt självständig distribution.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”Dela tillstånd och routning mellan remotes” gratis?
Ja – hela texten till ”Dela tillstånd och routning mellan remotes” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dela tillstånd och routning mellan remotes”?
Dela en enda React Router-instans och Zustand-store mellan oberoende distribuerade mikropresentationer. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Dela tillstånd och routning mellan remotes”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Module Federation: dynamiska importer vid körning
- Konfigurera värd- och fjärrappar i React
- Dela tillstånd och routning mellan remotes
- Versionshantering, driftsättning och orkestrering