React Academy · Lektion

Dela tillstånd och routning mellan remotes

Dela en enda React Router-instans och Zustand-store mellan oberoende distribuerade mikropresentationer.

Lektion 3 av 413 steg

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.

Gratis att börja

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

  1. Module Federation: dynamiska importer vid körning
  2. Konfigurera värd- och fjärrappar i React
  3. Dela tillstånd och routning mellan remotes
  4. Versionshantering, driftsättning och orkestrering
← Tillbaka till React Academy