0Pricing
React Academy · Lektion

Gemeinsamer State und Routing zwischen MFEs

Teilen Sie einen globalen Event-Bus oder Context über Micro-Frontends hinweg und koordinieren Sie clientseitiges Routing.

Gemeinsamer State und Routing zwischen MFEs ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Die Herausforderung beim Teilen von State

Micro-Frontends in unterschiedlichen Bundles können React-State oder Context nicht direkt gemeinsam nutzen. Dafür benötigen sie alternative Strategien: Custom Events, gemeinsame Stores, die URL oder einen Pub/Sub-Event-Bus.

Benutzerdefinierte Browser-Events

Verwenden Sie die CustomEvent-API des Browsers als einfachen Event-Bus zwischen Micro-Frontends, ohne sie eng miteinander zu koppeln.

// Remote emits:
window.dispatchEvent(new CustomEvent('cart:add', { detail: { productId: '123' } }));

// Host listens:
useEffect(() => {
  const handler = (e: CustomEvent) => addToCart(e.detail.productId);
  window.addEventListener('cart:add', handler);
  return () => window.removeEventListener('cart:add', handler);
}, []);

Gemeinsame Event-Bus-Bibliothek

Eine gemeinsam genutzte kleine Pub/Sub-Bibliothek (über Module Federation oder ein per URL geladenes Singleton) stellt allen MFEs einen typisierten Event-Bus zur Verfügung.

// Singleton event bus
const bus = {
  listeners: new Map<string, Function[]>(),
  emit(event: string, data: unknown) {
    this.listeners.get(event)?.forEach(fn => fn(data));
  },
  on(event: string, fn: Function) {
    if (!this.listeners.has(event)) this.listeners.set(event, []);
    this.listeners.get(event)!.push(fn);
    return () => this.off(event, fn);
  },
  off(event: string, fn: Function) {
    const list = this.listeners.get(event) || [];
    this.listeners.set(event, list.filter(f => f !== fn));
  },
};
export default bus;

Die URL als gemeinsamer State

Die URL (Pfad und Query-Parameter) wird von allen MFEs automatisch gemeinsam genutzt. Verwenden Sie sie für Navigations-State wie das ausgewählte Element, den aktiven Tab oder Filterwerte.

// Remote reads from URL:
const params = new URLSearchParams(window.location.search);
const productId = params.get('product');

// Remote navigates via history API (or exposes a navigate callback from host):
window.history.pushState({}, '', '/products?product=456');

Routing-Architektur

Typischerweise verwaltet die Shell-/Host-App den übergeordneten Router. Remote-Micro-Frontends erhalten den aktuellen Pfad und einen navigate-Callback als Props.

// Host passes routing control to remote:
<RemoteProductsApp
  basepath="/products"
  navigate={(path) => router.push(path)}
/>

// Remote uses basepath for its internal router:
<BrowserRouter basename={basepath}>
  <Routes>...</Routes>
</BrowserRouter>

React Router mit Module Federation

Jedes MFE kann einen eigenen React Router ausführen, der auf seinen Basepath beschränkt ist. Der Host-Router übernimmt die Navigation auf oberster Ebene, während jedes Remote die Unternavigation unabhängig verwaltet.

// Remote App component:
export function ProductsApp({ basepath = '/products' }) {
  return (
    <BrowserRouter basename={basepath}>
      <Routes>
        <Route path="/" element={<ProductList />} />
        <Route path="/:id" element={<ProductDetail />} />
      </Routes>
    </BrowserRouter>
  );
}

Gemeinsamer Auth-State

Der Auth-State (Benutzer, Token) wird typischerweise von der Shell verwaltet und als Props an Remotes weitergegeben oder über einen gemeinsamen Singleton-Store bereitgestellt.

// Host provides auth via props:
<RemoteCheckout
  userId={currentUser.id}
  token={accessToken}
  onLogout={handleLogout}
/>

Zustand als gemeinsamer Store

Wenn ein Zustand-Store über Module Federation als Singleton geteilt wird, lesen alle MFEs aus derselben Store-Instanz im Speicher.

// shared/store.ts (exposed as singleton)
import { create } from 'zustand';
export const useCartStore = create(set => ({
  items: [],
  addItem: (item) => set(state => ({ items: [...state.items, item] })),
}));

// Configured as singleton in MF shared config

Anti-Patterns bei der MFE-Kommunikation

Vermeiden Sie tief verschachtelte Callback-Ketten, das Teilen des internen Komponenten-States oder eine enge Kopplung an die internen APIs eines anderen MFEs. Beschränken Sie die Kommunikation auf grobgranulare Events und öffentliche Verträge.

Interaktionen zwischen MFEs testen

Testen Sie die Event-Verträge (Event-Namen und Datenstrukturen) getrennt von der UI. Verwenden Sie Contract Testing, um zu überprüfen, dass Producer und Consumer dasselbe Event-Schema verwenden.

Kurztest

Wie lassen sich Navigations- und Filter-State am einfachsten zwischen mehreren Micro-Frontends teilen, ohne sie zu koppeln?

Zusammenfassung

Teilen Sie State zwischen MFEs über Custom Events, einen Singleton-Event-Bus, die URL oder gemeinsame Stores (Zustand/Singleton). Die Shell verwaltet den Router auf oberster Ebene und übergibt Basepath und navigate an Remotes. Halten Sie Verträge zwischen MFEs grobgranular und gut typisiert.

Häufig gestellte Fragen

Ist die Lektion „Gemeinsamer State und Routing zwischen MFEs“ kostenlos?

Ja — der vollständige Text von „Gemeinsamer State und Routing zwischen MFEs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Gemeinsamer State und Routing zwischen MFEs“?

Teilen Sie einen globalen Event-Bus oder Context über Micro-Frontends hinweg und koordinieren Sie clientseitiges Routing. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Gemeinsamer State und Routing zwischen MFEs“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Micro-Frontend-Konzepte und Abwägungen
  2. Module Federation mit Webpack 5
  3. Gemeinsamer State und Routing zwischen MFEs
  4. Unabhängiges Deployment und CI-Pipelines für MFEs
← Zurück zu React Academy