Status Bersama & Perutean Antar-MFE
Bagikan bus event global atau context antar-micro-frontend dan koordinasikan perutean sisi klien.
Status Bersama & Perutean Antar-MFE adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.
Tantangan Berbagi Status
Mikro-frontend dalam bundel yang berbeda tidak dapat langsung berbagi status atau konteks React. Mikro-frontend memerlukan strategi alternatif: peristiwa khusus, penyimpanan bersama, URL, atau bus peristiwa publikasi/berlangganan.
Peristiwa Khusus Peramban
Gunakan API CustomEvent peramban sebagai bus peristiwa sederhana antara mikro-frontend tanpa menggabungkan keduanya secara erat.
// 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);
}, []);Pustaka Bus Peristiwa Bersama
Pustaka publikasi/berlangganan kecil yang dibagikan (melalui Module Federation atau satu instans yang dimuat dari URL) menyediakan bus peristiwa bertipe yang dapat diakses oleh semua MFE.
// 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;URL sebagai Status Bersama
URL (jalur + parameter kueri) secara alami dibagikan di antara semua MFE. Gunakan URL untuk status navigasi seperti item yang dipilih, tab aktif, atau nilai penyaring.
// 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');Arsitektur Perutean
Biasanya aplikasi kerangka/induk memiliki perute tingkat atas. Mikro-frontend jarak jauh menerima jalur saat ini dan panggilan balik navigate sebagai properti.
// 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 dengan Module Federation
Setiap MFE dapat menjalankan React Router sendiri yang dibatasi pada jalur dasarnya. Perute aplikasi induk menangani navigasi tingkat atas; setiap modul jarak jauh menangani subnavigasi secara independen.
// Remote App component:
export function ProductsApp({ basepath = '/products' }) {
return (
<BrowserRouter basename={basepath}>
<Routes>
<Route path="/" element={<ProductList />} />
<Route path="/:id" element={<ProductDetail />} />
</Routes>
</BrowserRouter>
);
}Status Autentikasi Bersama
Status autentikasi (pengguna, token) biasanya dimiliki oleh aplikasi kerangka dan diteruskan ke modul jarak jauh sebagai properti atau diekspos melalui penyimpanan satu instans bersama.
// Host provides auth via props:
<RemoteCheckout
userId={currentUser.id}
token={accessToken}
onLogout={handleLogout}
/>Zustand sebagai Penyimpanan Bersama
Saat Anda berbagi penyimpanan Zustand melalui Module Federation (sebagai satu instans), semua MFE membaca dari instans penyimpanan yang sama di memori.
// 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 configPola Anti-Komunikasi Lintas MFE
Hindari: rantai panggilan balik yang sangat bertingkat, berbagi status internal komponen, atau ketergantungan erat pada API internal MFE lain. Batasi komunikasi pada peristiwa umum dan kontrak publik.
Menguji Interaksi Lintas MFE
Uji kontrak peristiwa (nama peristiwa, bentuk data) secara terpisah dari antarmuka pengguna. Gunakan pengujian kontrak untuk memverifikasi bahwa produsen dan konsumen menyepakati skema peristiwa.
Pemeriksaan Singkat
Apa cara paling sederhana untuk berbagi status navigasi/penyaring antara beberapa mikro-frontend tanpa menggabungkan keduanya secara erat?
Ringkasan
Bagikan status antara MFE melalui peristiwa khusus, bus peristiwa satu instans, URL, atau penyimpanan bersama (Zustand/satu instans). Aplikasi kerangka memiliki perute tingkat atas dan meneruskan jalur dasar + navigasi ke modul jarak jauh. Jaga agar kontrak lintas MFE tetap umum dan memiliki tipe yang jelas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Status Bersama & Perutean Antar-MFE” gratis?
Ya — teks lengkap “Status Bersama & Perutean Antar-MFE” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Status Bersama & Perutean Antar-MFE”?
Bagikan bus event global atau context antar-micro-frontend dan koordinasikan perutean sisi klien. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai React Academy?
Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Status Bersama & Perutean Antar-MFE” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?
Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Micro-Frontend & Pertimbangannya
- Module Federation dengan Webpack 5
- Status Bersama & Perutean Antar-MFE
- Penerapan Mandiri & Pipeline CI untuk MFE