用于微前端下的应用间的路由跳转,提供路守卫能力,在路由变化时触发相应hook,帮助用户更加精确的控制路由变化,灵活地支持各类业务场景。
路由是微前端中重要且复杂的模块。在微前端应用下,子应用既可作为独立应用运行在自己的路由系统下,又可作为子应用嵌入在主应用下加载,为了实现两种模式的无缝切换,Garfish 实现了一套路由机制保证用户在这两种模式中平滑过渡,你可以在 Garfish 路由机制 中了解详细设计。
在阅读下面 API 介绍之前,你需要了解和保证一些配置规范。
provider
中的 render
函数拿到的 basename
= 主应用的 basename
+ activeWhen
;provider
中 render
函数接收到的 basename
设置为子应用的 basename
,如何配置;Garfish.router
Garfish.router
是 Garfish 实例上的属性,由 Garfish 路由系统提供。该属性上提供应用间路由跳转的方法、路由导航守卫钩子函数以及路由相关配置信息。其类型定义如下:
路由导航方法。
要跳转的路由,string
,必选。
设置跳转的基础路由,string
,非必选。
路由携带的查询参数,Record<string, string>
,非必选。
Garfish.router.push()
方法默认会携带上全局 basename 作为跳转前缀,若使用框架自身路由进行跳转,请记得主动添加basename
跳转前缀。下面两种跳转方式等价:此方法会向 history 栈添加新的记录,点击浏览器后退按钮后能正常返回上一个页面;
若跳转子应用的子路由,使用 Garfish.router.push()
方法跳转将触发子应用子路由视图更新。另外若关闭 autoRefreshApp 选项,则将只能使用 Garfish.router
进行跳转子应用子路由,但子应用一级路由仍将可使用框架路由跳转。
本 api 可以在 react-router-prompt 触发多次时,配合 autoRefreshApp 配置。关闭其他跳转方法触发子应用刷新组件,可限制 prompt 触发多次或子应用额外卸载多次的场景。
由于目前主流框架并不是通过监听路由变化来触发组件的更新的。在跳转子应用子路由时,若直接使用 history.pushState
将不会触发对应路由的组件更新,请使用 Garfish.router
提供的方法进行跳转。
路由导航方法。
要跳转的路由,string
,必选。
设置跳转的基础路由,string
,非必选。
路由携带的查询参数,Record<string, string>
,非必选。
Garfish.router.replace()
方法与 Garfish.router.push() 方法类似,唯一的区别是:它不会向 history 添加新记录,而是跟替换掉当前的 history 记录;to :即将要进入的目标路由信息。
from :即将离开的路由信息。
next :阻塞执行回调。
to :即将要进入的目标路由信息。
from :即将离开的路由信息。
next :阻塞执行回调。
location.pathname
。请注意:
Garfish.router.beforeEach
、Garfish.router.afterEach
和 Garfish.router.routerChange
均属于 Garfish 提供的路由守卫钩子,将在每次在路由变化后触发。Garfish.router.beforeEach
、Garfish.router.afterEach
和 Garfish.router.routerChange
是全局唯一的,如果设置多次,那么只有最后执行的是有效的。对它们的使用应该需要一定的约定,避免多次注册导致互相覆盖。Garfish.run
前执行,否则将无法接收到首次加载时的路由钩子;Garfish.router.beforeEach
将在子应用加载前触发,Garfish.router.afterEach
将在子应用加载后触发。此时路由均已发生变化;next
函数可为异步函数,微前端渲染流程将被阻塞直至 next
函数被 resolve。next
函数被执行,否则将导致 Garfish 内部子应用渲染逻辑被阻塞;next
函数调用的影响;