Vue Academy · Les

Gedeelde state tussen micro-frontends

Pinia-stores delen, een eventbus via CustomEvent en de URL als gedeelde state gebruiken.

Les 4 van 413 stappen

Gedeelde state tussen micro-frontends is een gratis Vue Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Vue Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Vue Academy bevat in totaal 4 lessen.

De uitdaging van gedeelde status

Onafhankelijke micro-frontends moeten nog steeds afstemmen: een aanmelding in het ene deel moet de koptekst in een ander deel bijwerken. Maar een sterke koppeling gaat in tegen het doel. Het doel is losse, bewuste communicatie.

Vermijd impliciete globale status

Alles op window zetten of één enorme gedeelde store gebruiken, brengt de koppeling van de monoliet terug. Geef de voorkeur aan expliciete, minimale contracten tussen delen, zodat teams zich onafhankelijk kunnen ontwikkelen.

CustomEvent voor communicatie

De CustomEvent-API van de browser is een frameworkonafhankelijke bus. Eén micro-frontend verstuurt een gebeurtenis op window; andere micro-frontends luisteren ernaar — gedeelde imports zijn niet nodig.

const event = new CustomEvent("cart:add", {
  detail: { productId: 42, qty: 1 },
})
window.dispatchEvent(event)

Naar gebeurtenissen luisteren

Andere delen abonneren zich met addEventListener en lezen de gegevens uit event.detail. Hierdoor zijn verzender en ontvanger ontkoppeld — ze hoeven alleen een naam en structuur van een gebeurtenis af te spreken.

window.addEventListener("cart:add", (e) => {
  console.log("Added", e.detail.productId)
})

Luisterfuncties opruimen in Vue

Registreer luisterfuncties in onMounted en verwijder ze in onUnmounted om lekken en dubbele afhandelingsfuncties te voorkomen wanneer componenten opnieuw worden gekoppeld.

import { onMounted, onUnmounted } from "vue"

function onAdd(e) { /* ... */ }
onMounted(() => window.addEventListener("cart:add", onAdd))
onUnmounted(() => window.removeEventListener("cart:add", onAdd))

Een getypeerd gebeurteniscontract

Documenteer de gebeurtenissen als een contract, zodat elk team de naam en structuur van de gegevens kent. Dit is de openbare API tussen micro-frontends.

// events contract
// "cart:add"    -> { productId: number, qty: number }
// "auth:login"  -> { userId: string }
// "auth:logout" -> {}

URL als gedeelde status

De URL is een natuurlijke gedeelde opslag voor navigatie en filters: die is globaal, kan als bladwijzer worden opgeslagen en elk deel kan hem lezen. Zet algemene status, zoals het actieve filter of de pagina, in queryparameters.

const params = new URLSearchParams(location.search)
const category = params.get("category") // shared across slices

URL-status bijwerken

Schrijf gedeelde filter- en navigatiestatus met de History API naar de URL, zodat die deelbaar blijft en goed werkt met de terugknop. Alle delen reageren door de nieuwe URL te lezen.

function setCategory(value) {
  const url = new URL(location.href)
  url.searchParams.set("category", value)
  history.pushState({}, "", url)
}

Singleton Pinia-store

Voor uitgebreidere gedeelde status binnen één pagina werkt een singleton Pinia-store goed — maar alleen als Pinia als singleton wordt gedeeld tussen de federaties, zodat alle delen dezelfde instantie gebruiken.

// federation config (both sides)
shared: {
  pinia: { singleton: true },
  vue: { singleton: true },
}

De gedeelde store gebruiken

Wanneer Pinia als singleton wordt gedeeld, is een store die door twee delen wordt geïmporteerd dezelfde store-instantie — status die door het ene deel wordt geschreven, wordt reactief door het andere deel gelezen.

// slice A writes
const auth = useAuthStore()
auth.login(user)

// slice B reads the same reactive state
const auth = useAuthStore()
console.log(auth.user)

Een strategie kiezen

  • CustomEvent — losse, frameworkonafhankelijke meldingen.
  • URL — navigatie, filters en alles wat deelbaar of als bladwijzer op te slaan is.
  • Singleton Pinia — uitgebreide reactieve status binnen de pagina; vereist singleton: true.

Geef de voorkeur aan de minst gekoppelde optie die aan de behoefte voldoet.

Korte controle

Controleer je begrip van status tussen MFE's.

Samenvatting

Je hebt geleerd hoe je status tussen micro-frontends deelt:

  • Geef de voorkeur aan losse, expliciete contracten boven impliciete globale status.
  • CustomEvent op window en addEventListener zorgen voor frameworkonafhankelijke berichtenuitwisseling; ruim op in onUnmounted.
  • De URL bevat via queryparameters en de History API deelbare navigatie- en filterstatus.
  • Een singleton Pinia-store deelt uitgebreide reactieve status, maar alleen met singleton: true in de federatie.
Gratis beginnen

Leer HTML met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
42
Lessen
156

Veelgestelde vragen

Is de les “Gedeelde state tussen micro-frontends” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Vue Academy, waaronder “Gedeelde state tussen micro-frontends”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Vue Academy bevat in totaal 4 lessen.

Wat leer ik in “Gedeelde state tussen micro-frontends”?

Pinia-stores delen, een eventbus via CustomEvent en de URL als gedeelde state gebruiken. Je oefent met Vue Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Vue Academy te beginnen?

Ervaring vooraf is niet nodig. Vue Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Gedeelde state tussen micro-frontends”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Vue Academy?

Ja. Elke les over Vue Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Principes van micro-frontendarchitectuur
  2. Webpack Module Federation met Vue
  3. Vite Federation Plugin
  4. Gedeelde state tussen micro-frontends
← Terug naar Vue Academy