【发布时间】:2018-07-05 00:05:47
【问题描述】:
我正在尝试使用在我的主 React 应用 (bundle B) 中的外部脚本 (bundle A) 中公开的 React 组件。
外部 React 'header' 组件 (bundle A) 通过 <script> 加载,并使用 Webpack expose-loader 作为全局窗口变量公开。
然后我的网站按以下顺序引用捆绑包:
- React/ReactDOM 包
- 外部头组件包(包A)
- 主应用程序包(包 B)
然后可以通过主应用程序中的window.appHeaderBundle 引用外部标头组件(bundle B) 例如
在我的主应用程序中,我尝试引用 const Header = window.appHeaderBundle.default; 之类的组件,然后在我的 render() 中将其用作纯 jsx <Header />。
这确实开始运行组件代码,但因错误而崩溃:
未捕获的错误:元素引用被指定为字符串 (searchForm),但没有设置所有者。你可能加载了多个 React 副本。
我正在尝试做的事情是否可行?如果可以,我怎样才能让我的组件呈现?
编辑:这种方法确实适用于仅呈现 <h1>test</h1> 的简单组件。 ref 的使用是破坏性的!
这背后的想法是可以将外部捆绑包放入多个站点。然后,更新外部捆绑包将反映在所有站点中。目前每个站点都通过 NPM 加载它,但这需要每个站点在进行更改时提高版本号,因此我为什么要采用这种方法。
【问题讨论】:
-
我正在尝试做类似的事情。您是否可以在使用
expose-loader的地方共享您的 webpack 配置。我添加了脚本标签以将我的外部组件作为脚本加载,但不确定如何在 webpack 中配置 -
我最后没有使用expose loader。 Bundle A 只是将组件分配给一个窗口变量,例如
window.myComponent = MyComponentName。只要您的 Bundle A 在您的主应用程序包之前加载,您就可以引用该窗口变量并将其用作常规组件。我自己的应用程序在加载问题的情况下有检查/回退。 -
Tnx。发表评论后,我采用了同样的方法
标签: javascript node.js reactjs webpack