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
stringJS 入口时,不需要传挂载点,Bridge 将会以子应用的渲染节点作为挂载点;HTML 入口时,则直接传入选择器,bridge 内部通过 dom.querySelector 来基于子应用的 dom 来找到挂载点;React.ComponentTypeloadRootComponent 至少传一个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;