Gedeelde state tussen micro-frontends
Pinia-stores delen, een eventbus via CustomEvent en de URL als gedeelde state gebruiken.
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 slicesURL-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
windowenaddEventListenerzorgen voor frameworkonafhankelijke berichtenuitwisseling; ruim op inonUnmounted. - 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: truein de federatie.
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
- Principes van micro-frontendarchitectuur
- Webpack Module Federation met Vue
- Vite Federation Plugin
- Gedeelde state tussen micro-frontends