Garfish bridge 是 garfish
提供的帮助用户降低接入成本的工具函数,它能自动提供 provider
函数所需的应用生命周期函数 render
和 destroy
,并实现框架不同版本的兼容。封装底层实现,降低接入成本和出错概率。
render
和 destroy
函数;@garfish/bridge-react 工具包是 garfish 为 react v16/v17 应用 提供的 bridge 工具函数包,其导出的 reactBridge 可用于 react v16/v17 子应用的接入,@garfish/bridge-react
的使用见 demo。
@garfish/bridge-react-v18 工具包是 garfish 为 react v18 应用 提供的 bridge 工具函数包,其导出的 reactBridge 可用于 react v18 子应用的接入,@garfish/bridge-react-v18
的使用见 demo。
@garfish/bridge-vue-v2 工具包是 garfish 为 vue v2 应用 提供的 bridge 工具函数包,其导出的 vueBridge 可用于 vue v2 子应用的接入,@garfish/bridge-vue-v2
的使用见 demo。
@garfish/bridge-vue-v3 工具包是 garfish 为 vue v3 应用 提供的 bridge 工具函数包,其导出的 vueBridge 可用于 vue v3 子应用的接入,@garfish/bridge-vue-v3
的使用见 demo。
reactBridge 是 @garfish/bridge-react
工具包为 react 子应用提供的 bridge 工具函数。
@garfish/bridge-react
工具包@garfish/bridge-react-v18
工具包reactBridge 是 @garfish/bridge-react
或 @garfish/bridge-react-v18
工具包为 react 子应用提供的 bridge 工具函数。
可访问 react16 子应用、 react17 子应用、react18 子应用 查看完整 demo
Options
string
JS
入口时,不需要传挂载点,Bridge 将会以子应用的渲染节点作为挂载点;HTML
入口时,则直接传入选择器,bridge 内部通过 dom.querySelector
来基于子应用的 dom
来找到挂载点;React.ComponentType
loadRootComponent
至少传一个loadRootComponent
参数时,rootComponent
参数将失效,且 rootComponent
组件不会默认接收到 garfish 传递的子应用相关参数;loadRootComponentType = (opts: Record<string, any>) => Promise<ComponentType>;
rootComponent
至少传一个loadRootComponent
是一个函数,返回一个 Promise 对象,resolve 后需要返回当前 React 应用的顶层组件,该顶层组件含义与 rootComponent
含义相同。当需要在 render 前进行异步操作时,可使用 loadRootComponent
加入副作用逻辑。loadRootComponent
将默认接收到 garfish 传递的子应用相关参数:此时,RootComponent
接收到的参数取决于此处 loadRootComponent
传递的参数。
rootComponent
参数时,loadRootComponent
的优先级更高, rootComponent
将失效;errorBoundary: (caughtError: boolean, info: string, props: any) => ReactNode | null;
errorBoundary
是一个函数,并在子应用发生错误时触发,该函数将传递 error 报错信息及报错相关应用堆栈信息:针对 vue v2 子应用,请使用 @garfish/bridge-vue-v2
工具包。
vueBridge 是 @garfish/bridge-vue-v2
工具包为 vue v2 子应用提供的 bridge 工具函数。
可访问 vue2 子应用 查看完整 demo
Options
Type:vue.Component
非必传。此参数和 loadRootComponent
至少传一个
当前应用的顶层 Vue 组件,该组件中将接受到 garfish 传递的子应用相关参数:
当同时传入了 loadRootComponent
参数时,rootComponent
将失效,且 rootComponent
组件不会默认接受到 garfish 传递的子应用相关参数;
Type:loadRootComponentType = (opts: Record<string, any>) => Promise<ComponentType>;
非必传。此参数和 rootComponent
至少传一个
当前应用的顶层 Vue 组件,该组件中实例的 data 对象中将接收到 garfish 传递的子应用相关参数
loadRootComponent
是一个函数,返回一个 Promise 对象,resolve 后需要返回当前 Vue 应用的顶层组件,该顶层组件含义与 rootComponent
含义相同。当需要在 render 前进行异步操作时,可使用 loadRootComponent
加入副作用逻辑。
loadRootComponent
将默认接收到 garfish 传递的子应用相关参数:
当同时传入了 rootComponent
参数时,loadRootComponent
的优先级更高, rootComponent
将失效;
appOptions: (opts: Record<string, any>) => Record<string, any> | Record<string, any>
data
对象中。appOptions
参数将直接透传为 Vue 构造函数实例化时的初始化参数 new Vue(appOptions),此时参数类型与 vue 保持一致。若未传递 appOptions
参数,则将自动提供 vue2 应用 render
函数用于渲染:render: (h) => h(opts.rootComponent)
。appOptions: { el: '#app', ...}
,若未指定 el
参数,将默认使用全局挂载点。需要注意的是,appOpitons
中并不会默认包含路由或状态逻辑的处理,可显示在 appOpitons
中传递路由参数信息。
handleInstance: (vueInstance: InstanceType<vue.VueConstructor>, opts: optionsType) => void;
针对 vue v3 子应用,请使用 @garfish/bridge-vue-v3
工具包。
vueBridge 是 @garfish/bridge-vue-v3
工具包为 vue v3 子应用提供的 bridge 工具函数。
可访问 vue v3 子应用 查看完整 demo
Options
Type:vue.Component
非必传。此参数和 loadRootComponent
至少传一个
当前应用的顶层 Vue 组件,该组件中将接受到 garfish 传递的子应用相关参数:
当同时传入了 loadRootComponent
参数时,rootComponent
将失效,且 rootComponent
组件不会默认接受到 garfish 传递的子应用相关参数;
Type:loadRootComponentType = (opts: Record<string, any>) => Promise<ComponentType>;
非必传。此参数和 rootComponent
至少传一个
当前应用的顶层 Vue 组件,该组件中实例的 data 对象中将接收到 garfish 传递的子应用相关参数
loadRootComponent
是一个函数,返回一个 Promise 对象,resolve 后需要返回当前 Vue 应用的顶层组件,该顶层组件含义与 rootComponent
含义相同。当需要在 render 前进行异步操作时,可使用 loadRootComponent
加入副作用逻辑。
loadRootComponent
将默认接收到 garfish 传递的子应用相关参数:
当同时传入了 rootComponent
参数时,loadRootComponent
的优先级更高, rootComponent
将失效;
appOptions: (opts: Record<string, any>) => Record<string, any> | Record<string, any>
data
对象中。appOptions
参数将直接透传给 createApp
函数调用: createApp(appOptions)
,此时参数类型与 createApp 保持一致。若未传递 appOptions
参数,则将直接调用 createApp(rootComponent)
创建根组件。appOptions: { el: '#app', ...}
,若未指定 el
参数,将默认使用全局挂载点。需要注意的是,appOptions
中并不会默认包含路由或状态逻辑的处理,可通过 handleInstance
函数拿到创建的 vue 实例对象后进行路由注册。
handleInstance: (vueInstance: vue.App, opts: optionsType) => void;