@module-federation/bridge-react 提供了用于 React 应用的 bridge 工具函数:
createBridgeComponent:用于导出应用级别模块,适用于生产者包装其作为应用类型导出的模块createRemoteComponent:用于加载应用级别模块,适用于消费者加载作为应用类型加载的模块请注意:使用 @module-federation/bridge-react 后不能将 react-router-dom 设置成 shared,否则构建工具将会提示异常。这是因为 @module-federation/bridge-react 通过代理 react-router-dom 实现了对路由的控制,以保证应用间路由能够正常协同工作。
在生产者项目中,假设我们需要将应用通过
@module-federation/bridge-react导出为一个应用类型模块,应用入口为 App.tsx 文件
export-app.tsx,该文件将作为应用类型模块导出的文件。我们需要使用 createBridgeComponent 来包装应用的根组件。rsbuild.config.ts 配置文件中,我们需要将 export-app.tsx 作为应用类型模块导出至此,我们完成了应用类型模块的导出。
为什么应用类型模块需要使用 createBridgeComponent 包装?原因主要有三点:
createBridgeComponent 包装的组件将符合应用类型消费方的加载协议,这使得跨框架渲染成为可能basename。通过 createBridgeComponent 包装的组件将自动注入 basename,这能保证生产者应用在消费者项目下也能正常工作createBridgeComponent 包装的组件将包裹 ErrorBoundary,以保证在远程加载失败或渲染出错时,能够自动进入兜底逻辑Host
rsbuild.config.ts 配置中,我们需要注册远程模块,这点与其它 Module Federation 配置无异。createRemoteComponent 来加载应用类型模块至此,我们完成了应用类型模块的加载。
通过 createRemoteComponent 导出的远程模块将会自动使用 react-bridge 加载协议加载模块,
这使得应用的跨框架渲染成为可能。
此外,createRemoteComponent 会自动处理模块加载、模块销毁、错误处理、loading、路由 等逻辑,
开发者只需要关注如何使用远程组件即可。
通过 createRemoteComponent 导出的远程模块,你可以像使用普通 React 组件一样使用远程组件:传递 className、style、props、ref 等属性均会自动透传到远程组件,
这使得用户在体验上几乎等同于使用本地组件
createBridgeComponent 用于将 React 组件包装成可远程加载的模块。
createRemoteComponent 用于加载远程 React 组件。