Modern.js 微前端架构中 useModuleApps 的核心用法解析
2025-07-08 06:14:35作者:裘晴惠Vivianne
概述
在现代前端开发中,微前端架构已经成为解决大型应用复杂性的重要方案。Modern.js 框架提供了强大的微前端支持,其中 useModuleApps
是一个关键 React Hook,它允许主应用灵活地加载和控制微前端子应用。
核心概念
useModuleApps
是 Modern.js 微前端插件提供的一个 React Hook,它返回一个包含所有已注册子应用 React 组件的对象。每个子应用都会被封装成一个标准的 React 组件,可以在主应用中像使用普通组件一样使用它们。
基本用法
1. 引入 Hook
首先需要在主应用中引入这个 Hook:
import { useModuleApps } from '@modern-js/plugin-garfish/runtime';
2. 配置子应用
在 Modern.js 配置文件中定义微前端子应用:
defineConfig(App, {
masterApp: {
apps: [
{
name: 'Home', // 这个名称会作为返回对象的属性名
entry: 'http://127.0.0.1:8081/',
},
{
name: 'Contact',
entry: 'http://localhost:8082',
},
],
},
});
3. 使用子应用组件
在组件中使用 useModuleApps
获取子应用组件:
function App() {
const { Home, Contact } = useModuleApps();
return (
<div>
<h1>主应用</h1>
<Route exact path="/home">
<Home />
</Route>
<Route exact path="/contact">
<Contact />
</Route>
</div>
);
}
高级用法
集中式路由管理
Modern.js 支持集中式路由配置,这种方式更适合大型微前端应用:
defineConfig(App, {
masterApp: {
apps: [
{
name: 'Dashboard',
activeWhen: '/dashboard', // 路由匹配规则
entry: 'http://127.0.0.1:8081/',
},
{
name: 'TableList',
activeWhen: '/table',
entry: 'http://localhost:8082',
},
],
},
});
然后在主应用中使用 MApp
组件自动处理路由匹配:
function App() {
const { MApp } = useModuleApps();
return (
<div>
<MApp />
</div>
);
}
自定义加载状态
可以为子应用添加自定义的加载状态和错误处理:
function App() {
const {
Components: { Home },
} = useModuleApps();
return (
<Route exact path="/home">
<Home
loadable={{
loading: ({ pastDelay, error }) => {
if (error) {
return <div>加载出错: {error.message}</div>;
} else if (pastDelay) {
return <div>加载中...</div>;
}
return null;
},
}}
/>
</Route>
);
}
最佳实践
- 命名规范:子应用名称区分大小写,确保配置中的名称与使用时的名称一致
- 错误边界:建议为每个子应用组件添加错误边界处理
- 性能优化:对于不常用的子应用,可以考虑动态加载
- 样式隔离:确保子应用之间有良好的样式隔离机制
常见问题
- 子应用未加载:检查 entry 地址是否正确,确保子应用服务已启动
- 路由冲突:主应用和子应用的路由规则不要重叠
- 上下文丢失:确保主应用和子应用之间的全局状态管理方案兼容
总结
useModuleApps
是 Modern.js 微前端架构中的核心 API,它简化了子应用的集成和管理工作。通过合理的配置和使用,开发者可以构建出既保持独立开发部署能力,又能良好集成的大型前端应用。