React 主应用接入
对于 React 主应用,推荐使用 AppRouter/AppRoute
这种 React Component 的方式。
#
通过官方脚手架创建提示
更多有关官方脚手架的使用细节,请访问 飞冰 - 微前端 icestark
#
已有应用改造#
微应用管理与注册通过 AppRouter/AppRoute
注册微应用:
通过 ReactDOM 渲染应用:
#
AppRouter 配置项- onRouteChange:路由变化时触发
- NotFoundComponent:未匹配到微应用时渲染的组件
- ErrorComponent:微应用加载失败渲染的组件
- LoadingComponent:微应用加载过程渲染的组件
- basename:整个主应用部署在某个基础路由下
更多参数请参考 API 介绍 AppRouter。
#
AppRoute 配置项#
路由与微应用的映射关系通过 activePath 和 exact 两个属性配置微应用的匹配规则,建立路由和微应用的映射关系。
#
微应用入口 entry/entryContent/url对于 entry/entryContent/url 方式的使用请参考文档微应用 - 入口规范。在此基础上,结合 React 的能力 AppRoute 还支持了更为灵活的 component 和 render 方式配置微应用入口:
通过这种方式,可以通过 AppRoute 渲染一个 iframe 或者任意的 React 组件(比如 ReactRouter)。
#
其他参数- umd:默认
false
,标识微应用是否为 umd 类型 - sandbox:默认
false
,是否开启 js 沙箱模式 - cached:默认
false
,切换后是否缓存微应用,可能会引起内存占用过大问题,不建议开启 - hashType:默认
false
,标识微应用的路由是否为 hash 模式
更多参数请参考 API 介绍 AppRoute。
#
进阶指南#
主应用中路由跳转如果在主应用里定义了一些路由页面,那么微前端主应用的层级如下:
这里面可以看到 FrameworkLayout 是在 ReactRouter 外层的,因此在 FrameworkLayout 里是没法使用 react-router 提供的 API,比如 withRouter
, Link
, useParams
等。如果要做路由跳转建议通过 appHistory
或者 AppLink
来实现:
#
主应用中如何包含路由页面我们不推荐主应用里包含一些具体的路由页面,但是如果业务有这种需求,比如想把登录注册之类的通用页面放在主应用里,可以按照下面的方式。
注意:使用官方模板创建出来的 icejs 主应用默认支持该能力
#
通过数据驱动注册微应用列表在很多场景下,我们的微应用可能通过一些配置平台注册,这时候可以将所有微应用的信息通过全局变量输出到 html 中,然后前端通过该数据注册微应用:
#
微应用级别权限校验icestark 支持对 AppRoute
再进行二次封装,统一处理容器定制/权限校验等场景:
封装完成后即可在 AppRouter 下使用:
#
不同页面 Layout 不同通过 AppRouter 的 onRouteChange
属性可以捕获到所有的路由变化,此时可以根据不同路由对 Layout 做一些状态的变化,实现不同页面不同布局的能力。