Tilan ja reitityksen jakaminen remote-sovellusten välillä
Jakakaa yksi React Router -instanssi ja Zustand-varasto itsenäisesti julkaistujen mikrofrontendien kesken.
Tilan ja reitityksen jakaminen remote-sovellusten välillä on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.
Tilan jakamisen haaste
Jokainen Module Federation -remote on itsenäisesti rakennettu ja julkaistu sovellus. Sen tila (React useState, Context ja Zustand-säilöt) elää omassa JavaScript-moduulin näkyvyysalueessaan. Host ja remotet eivät jaa tilaa automaattisesti – jakaminen on suunniteltava erikseen.
Vaihtoehto 1: URL yhteisenä tilana
Yksinkertaisin tilan jakamisen mekanismi on URL: mikä tahansa remote voi lukea URL-parametreja, kyselymerkkijonoja ja hash-arvoja ilman remotejen välistä viestintää. Tämä sopii hyvin ensisijaiseen navigointitilaan, suodattimien arvoihin ja kaikkeen tilaan, jonka pitäisi olla mahdollista tallentaa kirjanmerkiksi ja jakaa linkkinä.
Vaihtoehto 2: CustomEvents löyhään kytkentään
Selaimen EventTargetin kautta välitettävien CustomEvents-tapahtumien avulla remotet voivat viestiä ilman suoria importteja. Remote kutsuu window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), ja mikä tahansa muu moduuli (host tai toinen remote) kuuntelee tapahtumaa kutsulla window.addEventListener('cart:updated', handler). Yhteistä moduulia ei tarvita.
Vaihtoehto 3: Jaetun tilan remote
Luokaa oma "state remote", joka tarjoaa Zustand- tai Jotai-säilön. Sekä host että muut remotet tuovat sen jaetusta state remotesta ja saavat saman store-instanssin, koska kyseessä on jaettu singleton. Tämä on tehokas ratkaisu monimutkaiseen jaettuun tilaan (todennus, ostoskori ja käyttäjäasetukset), mutta lisää käyttöönottoriippuvuuden.
Vaihtoehto 4: Host omistaa tilan ja välittää callbackit
Shell (host) omistaa kaiken jaetun tilan ja välittää sen remoteille propseina tai Contextin kautta. Remotet saavat callbackit, kuten onCartUpdate, ja navigointitoiminnot propseina. Näin tila pysyy keskitettynä hostissa, mutta hostin on tunnettava remotejen API:t, mikä luo tiukan kytkennän.
React Router Module Federationissä
React Routerin history- ja location-tila tarjotaan Router-komponentilla (BrowserRouter tai createBrowserRouter). Module Federation -kokoonpanossa saa olla täsmälleen yksi Router. Jos se sijoitetaan jokaiseen remoteen, syntyy useita keskenään kilpailevia reitityskonteksteja, mikä aiheuttaa navigointiristiriitoja.
Host omistaa reitittimen
Arkkitehtuurisääntö on seuraava: host (shell) tarjoaa Routerin. Remotet saavat hostilta reitityspropsit tai lukevat URL:n suoraan. Remote ei saa koskaan luoda omaa BrowserRouter-komponenttia – se olisi ristiriidassa hostin Routerin kanssa ja rikkoisi koko sovelluksen navigoinnin.
Kontekstin jakaminen remotejen välillä
React Context -arvot ovat sidoksissa tiettyyn React-instanssiin ja Context-objektiin. Jotta Context toimisi hostin ja remoten välillä, molempien on tuotava sama Context-objekti samasta lähteestä – tyypillisesti jaetusta state remotesta tai jaettujen apuohjelmien paketista. React-singleton varmistaa, että sama Context toimii kaikissa remoteissa.
Shell-arkkitehtuurimalli
Selkeässä Module Federation -arkkitehtuurissa shell (host) omistaa HTML-kuoren, Router-palveluntarjoajan, Auth-kontekstin, teeman/design token -tarjoajan ja yleisen navigoinnin. Remotet omistavat omien toiminnallisuusalueidensa sisällön. Shell kokoaa remotet osaksi asettelua tuntematta niiden toteutuksen yksityiskohtia.
Tiukan kytkennän välttäminen
Module Federationin suurin antipattern on tiukka host–remote-kytkentä: host tuo tyyppejä remotesta, remote tuo komponentteja hostista tai ne jakavat yhteisen npm-paketin, joka molempien on päivitettävä samanaikaisesti. Tällaiset kytkennät kumoavat itsenäisen käyttöönoton tarkoituksen.
Viestintäsopimukset
Määritelkää hostin ja remotejen välille selkeät sopimukset: propsit, jotka remote-komponentti hyväksyy, CustomEvents-tapahtumat, jotka se lähettää, sekä URL-parametrit, joita se lukee. Dokumentoikaa nämä sopimukset jaetun types-paketin TypeScript-rajapintoina. Näin tiimit voivat kehittyä itsenäisesti sovitun sopimuksen puitteissa.
React Routerin sijoittaminen Module Federationissä
Mihin React Routerin tarjoaja (BrowserRouter) tulisi sijoittaa Module Federation -arkkitehtuurissa?
Oppitunnin kertaus
Tilan jakamiseen Module Federation -remotejen välillä voidaan käyttää URL-tilaa (yksinkertaisin vaihtoehto), CustomEvents-tapahtumia (löyhästi kytketty), jaetun tilan remotea (keskitetty säilö) tai hostin omistamaa tilaa, joka välitetään propseina. Hostin on omistettava ainoa Router-palveluntarjoaja – remotet eivät saa koskaan luoda omaa. Selkeät TypeScript-rajapintojen avulla määritetyt viestintäsopimukset pitävät tiimit erillään ja mahdollistavat aidosti itsenäisen käyttöönoton.
Opi React tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 88
- Oppitunnit
- 324
Usein kysytyt kysymykset
Onko oppitunti ”Tilan ja reitityksen jakaminen remote-sovellusten välillä” ilmainen?
Kyllä – oppitunnin ”Tilan ja reitityksen jakaminen remote-sovellusten välillä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tilan ja reitityksen jakaminen remote-sovellusten välillä”?
Jakakaa yksi React Router -instanssi ja Zustand-varasto itsenäisesti julkaistujen mikrofrontendien kesken. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Tilan ja reitityksen jakaminen remote-sovellusten välillä”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?
Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Module Federation: dynaamiset ajonaikaiset tuonnit
- Isäntä- ja etäisten React-sovellusten määrittäminen
- Tilan ja reitityksen jakaminen remote-sovellusten välillä
- Versiointi, käyttöönotto ja orkestrointi