React Academy · Lekcja

Współdzielenie stanu i routingu między zdalnymi aplikacjami

Proszę współdzielić jedną instancję React Router i magazyn Zustand między niezależnie wdrażanymi mikrofrontendami.

Lekcja 3 z 413 kroki

Współdzielenie stanu i routingu między zdalnymi aplikacjami to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Wyzwanie związane ze współdzieleniem stanu

Każdy remote w Module Federation jest niezależnie kompilowaną i wdrażaną aplikacją. Jego stan (React useState, Context, magazyny Zustand) znajduje się w osobnym zakresie modułu JavaScript. Host i remotes nie współdzielą stanu automatycznie — udostępnianie trzeba zaprojektować jawnie.

Opcja 1: URL jako współdzielony stan

Najprostszym mechanizmem współdzielenia stanu jest URL: każdy remote może odczytywać parametry URL, ciągi zapytań i wartości fragmentu bez komunikacji między remote'ami. Sprawdza się to dobrze w przypadku głównego stanu nawigacji, wartości filtrów oraz każdego stanu, który powinien nadawać się do dodania do zakładek i udostępnienia za pomocą linku.

Opcja 2: CustomEvents dla luźnego powiązania

CustomEvents za pośrednictwem obiektu EventTarget przeglądarki umożliwiają remote'om komunikację bez bezpośrednich importów. Remote wysyła zdarzenie za pomocą window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), a dowolny inny moduł (host lub inny remote) nasłuchuje go za pomocą window.addEventListener('cart:updated', handler). Nie jest potrzebny żaden współdzielony moduł.

Opcja 3: Współdzielony remote stanu

Należy utworzyć dedykowany zdalny moduł stanu, który udostępnia magazyn Zustand lub Jotai. Zarówno host, jak i inne remotes importują z tego modułu tę samą instancję magazynu — ponieważ jest on współdzielonym singletonem. To rozwiązanie dobrze sprawdza się w przypadku złożonego współdzielonego stanu (uwierzytelniania, koszyka i preferencji użytkownika), ale wprowadza zależność od wdrożenia.

Opcja 4: Host zarządza stanem i przekazuje callbacki

Powłoka (host) zarządza całym współdzielonym stanem i przekazuje go do remote'ów jako props lub za pośrednictwem Context. Remotes otrzymują callbacki, takie jak onCartUpdate, a także navigate jako props. Dzięki temu stan pozostaje scentralizowany w hoście, ale host musi znać API remote'ów, co tworzy silne powiązanie.

React Router w Module Federation

Stan historii i lokalizacji React Routera jest udostępniany przez komponent Router (BrowserRouter lub createBrowserRouter). W konfiguracji Module Federation musi istnieć dokładnie jeden Router — umieszczenie go w każdym remote powodowałoby utworzenie wielu konkurujących kontekstów routingu, prowadząc do konfliktów nawigacji.

Host zarządza Routerem

Reguła architektoniczna jest następująca: host (shell) udostępnia Router. Remotes otrzymują od hosta propsy związane z routingiem albo odczytują dane bezpośrednio z URL. Remote nigdy nie powinien tworzyć własnego BrowserRouter — kolidowałby on z Routerem hosta i zakłóciłby nawigację w całej aplikacji.

Współdzielenie Context między remote'ami

Wartości React Context są powiązane z konkretną instancją React i obiektem Context. Aby Context działał między hostem a remote'em, oba muszą importować ten sam obiekt Context z tego samego źródła — zazwyczaj ze współdzielonego modułu stanu lub pakietu współdzielonych narzędzi. Singleton React zapewnia, że ten sam Context działa we wszystkich remote'ach.

Wzorzec architektury shell

W przejrzystej architekturze Module Federation shell (host) odpowiada za: powłokę HTML, dostawcę Routera, kontekst Auth, dostawcę motywu i tokenów projektowych oraz globalną nawigację. Remotes odpowiadają za treści swoich domen funkcjonalnych. Shell składa remotes w ramach układu bez znajomości szczegółów ich implementacji.

Unikanie silnego powiązania

Największym antywzorcem w Module Federation jest silne powiązanie hosta z remote'em: host importuje typy z remote'a, remote importuje komponenty z hosta albo oba korzystają ze wspólnego pakietu npm, który muszą aktualizować jednocześnie. Takie powiązania niweczą sens niezależnego wdrażania.

Kontrakty komunikacyjne

Należy zdefiniować jawne kontrakty między hostem a remote'ami: propsy przyjmowane przez komponent remote'a, CustomEvents, które wysyła, oraz parametry URL, które odczytuje. Kontrakty te należy udokumentować jako interfejsy TypeScript we współdzielonym pakiecie typów. Dzięki temu zespoły mogą rozwijać się niezależnie, przestrzegając uzgodnionego kontraktu.

Umiejscowienie React Routera w Module Federation

Gdzie w architekturze Module Federation należy umieścić dostawcę React Routera (BrowserRouter)?

Podsumowanie lekcji

Stan między remote'ami Module Federation można współdzielić za pomocą stanu URL (najprostsze rozwiązanie), CustomEvents (luźne powiązanie), współdzielonego modułu stanu (scentralizowany magazyn) lub stanu hosta przekazywanego jako propsy. Host musi zarządzać jednym dostawcą Routera — remotes nigdy nie powinny tworzyć własnych. Jasne kontrakty komunikacyjne w postaci interfejsów TypeScript pozwalają zachować niezależność zespołów i umożliwiają rzeczywiście niezależne wdrażanie.

Bezpłatny start

Ucz się React dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
88
Lekcje
324

Często zadawane pytania

Czy lekcja „Współdzielenie stanu i routingu między zdalnymi aplikacjami” jest bezpłatna?

Tak — pełny tekst „Współdzielenie stanu i routingu między zdalnymi aplikacjami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Współdzielenie stanu i routingu między zdalnymi aplikacjami”?

Proszę współdzielić jedną instancję React Router i magazyn Zustand między niezależnie wdrażanymi mikrofrontendami. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Współdzielenie stanu i routingu między zdalnymi aplikacjami”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Module Federation: dynamiczne importy w czasie działania
  2. Konfiguracja aplikacji React hosta i aplikacji zdalnych
  3. Współdzielenie stanu i routingu między zdalnymi aplikacjami
  4. Wersjonowanie, wdrażanie i orkiestracja
← Powrót do React Academy