React Academy · leksjon

Dele tilstand og ruting mellom remoter

Del én React Router-instans og én Zustand-store mellom uavhengig distribuerte mikrorammeverk.

Leksjon 3 av 413 trinn

Dele tilstand og ruting mellom remoter er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Utfordringen med deling av tilstand

Hver Module Federation-remote er en selvstendig bygget og distribuert applikasjon. Tilstanden (React useState, Context, Zustand-lagre) ligger i sitt eget JavaScript-modulomfang. Hosten og remotes deler ikke automatisk tilstand – delingen må arkitekteres eksplisitt.

Alternativ 1: URL som delt tilstand

Den enkleste mekanismen for deling av tilstand er URL-en: alle remotes kan lese URL-parametere, query strings og hash-verdier uten kommunikasjon på tvers av remotes. Dette fungerer godt for primær navigasjonstilstand, filterverdier og all annen tilstand som bør kunne bokmerkes og deles via en lenke.

Alternativ 2: CustomEvents for løs kobling

CustomEvents via nettleserens EventTarget gjør det mulig for remotes å kommunisere uten direkte importer. Et remote sender window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), og enhver annen modul (host eller andre remotes) lytter med window.addEventListener('cart:updated', handler). Ingen delt modul er nødvendig.

Alternativ 3: En state remote for delt tilstand

Opprett en dedikert «state remote» som eksponerer en Zustand- eller Jotai-store. Både hosten og andre remotes importerer fra denne state remoten og får den samme store-instansen – fordi den er en delt singleton. Dette er effektivt for kompleks, delt tilstand (autentisering, handlekurv og brukerinnstillinger), men tilfører en distribusjonsavhengighet.

Alternativ 4: Hosten eier tilstanden og sender callbacks

Skallet (hosten) eier all delt tilstand og sender den videre til remotes som props eller via Context. Remotes mottar callbacks som onCartUpdate og navigate som props. Dette holder tilstanden sentralisert i hosten, men krever at hosten kjenner API-ene til remotes – noe som skaper tett kobling.

React Router i Module Federation

React Routers history- og location-tilstand leveres av en Router-komponent (BrowserRouter eller createBrowserRouter). Det må finnes nøyaktig én Router i et Module Federation-oppsett – hvis du plasserer én i hvert remote, oppstår flere konkurrerende rutingskontekster, noe som fører til navigasjonskonflikter.

Hosten eier Router

Den arkitektoniske regelen er at hosten (skallet) leverer Router-en. Remotes mottar rutingprops fra hosten (eller leser URL-en direkte). Et remote skal aldri opprette sin egen BrowserRouter – det vil komme i konflikt med hostens Router og ødelegge navigasjonen for hele applikasjonen.

Dele Context mellom remotes

React Context-verdier er knyttet til en bestemt React-instans og et bestemt Context-objekt. For at en Context skal fungere på tvers av host og remote, må begge importere det samme Context-objektet fra samme kilde – vanligvis state remoten eller en delt verktøypakke. React-singletonen sikrer at den samme Context fungerer på tvers av alle remotes.

Arkitekturmønster for shell

I en ryddig Module Federation-arkitektur eier skallet (hosten) HTML-skallet, Router-leverandøren, Auth-konteksten, leverandøren av tema og design tokens samt global navigasjon. Remotes eier innholdet i sitt funksjonsdomene. Skallet setter sammen remotes i layouten uten å kjenne implementasjonsdetaljene deres.

Unngå tett kobling

Det største antipatternet i Module Federation er tett kobling mellom host og remote: hosten importerer typer fra remote, remote importerer komponenter fra hosten, eller de deler en felles npm-pakke som begge må oppdatere samtidig. Slike koblinger motvirker formålet med uavhengig distribusjon.

Kommunikasjonskontrakter

Definer eksplisitte kontrakter mellom host og remotes: hvilke props en remote-komponent tar imot, hvilke CustomEvents den sender ut, og hvilke URL-parametere den leser. Dokumenter disse kontraktene som TypeScript-grensesnitt i en delt types-pakke. Da kan teamene utvikle seg uavhengig innenfor den avtalte kontrakten.

Plassering av React Router i Module Federation

Hvor bør React Router-leverandøren (BrowserRouter) plasseres i en Module Federation-arkitektur?

Oppsummering av leksjonen

Deling av tilstand på tvers av Module Federation-remotes kan bruke URL-tilstand (enklest), CustomEvents (løst koblet), en delt state remote (sentralisert store) eller tilstand som eies av hosten og sendes som props. Hosten må eie den eneste Router-leverandøren – remotes skal aldri opprette sin egen. Tydelige kommunikasjonskontrakter via TypeScript-grensesnitt holder teamene løst koblet og muliggjør reell uavhengig distribusjon.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Dele tilstand og ruting mellom remoter» gratis?

Ja – hele teksten i «Dele tilstand og ruting mellom remoter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Dele tilstand og ruting mellom remoter»?

Del én React Router-instans og én Zustand-store mellom uavhengig distribuerte mikrorammeverk. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Dele tilstand og ruting mellom remoter»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Module Federation: Dynamiske importer ved kjøring
  2. Konfigurere verts- og eksterne React-apper
  3. Dele tilstand og ruting mellom remoter
  4. Versjonering, utrulling og orkestrering
← Tilbake til React Academy