在“运行时”从外部脚本加载React JS组件
Load React JS component from external script in "run time"
我正在使用React JS + webpack。我需要解决的一般情况是动态加载没有与主应用捆绑在一起的React组件。一种可插入组件,可以独立于主应用程序开发,然后由应用程序动态加载,而无需重新构建整个应用程序。
特殊情况如下。
我有两个完全分离的模块(即使用不同的包构建)。Json和webpack.config.js):
-
MainApp
- 部分
Component
我需要实现以下行为:
- 加载
-
MainApp
动态查找包含Component
的.js文件的url(例如通过向web服务器发出GET请求)。 -
MainApp
与Component
一起加载.js文件,并将其作为<script>
包含到页面 -
MainApp
在渲染时使用加载的Component
。
MainApp
并初始化的页面。这样的用例在react js + webpack中可能吗?
在webpack 5中,你现在可以通过模块联合来做到这一点。
基本的思想是你"公开"一个项目的导出,以便在另一个项目中使用:
App 1(使用来自app2的按钮)
<!-- public/index.html -->
<html>
<head>
<!-- remote reference to app 2 -->
<script src="http://localhost:3002/remoteEntry.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
//app.ts
import * as React from "react";
const RemoteButton = React.lazy(() => import("app2/Button"));
const App = () => (
<div>
<h1>Typescript</h1>
<h2>App 1</h2>
<React.Suspense fallback="Loading Button">
<RemoteButton />
</React.Suspense>
</div>
);
export default App;
//... webpack.config.js
plugins: [
new ModuleFederationPlugin({
name: "app1",
library: { type: "var", name: "app1" },
remotes: {
app2: "app2",
},
shared: ["react", "react-dom"],
}),
new HtmlWebpackPlugin({
template: "./public/index.html",
}),
]
App 2 (expose Button)
// src/Button.ts
import * as React from "react";
const Button = () => <button>App 2 Button</button>;
export default Button;
//... webpack.config.js
plugins: [
new ModuleFederationPlugin({
name: "app2",
library: { type: "var", name: "app2" },
filename: "remoteEntry.js",
exposes: {
Button: "./src/Button",
},
shared: ["react", "react-dom"],
})
]
听起来你在问如何外部化React。如果是这样,您可以将库列为"外部"。在webpack.config.js
文件中:
webpackConfig.externals = {
"react": "React",
"react-dom": "ReactDOM",
...
}
相关文章:
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- JavaScript运行时是如何工作的
- 在运行时创建元素时移到一边时出错
- 如何在运行时在HTML5画布中绘制正方形
- 如何在运行时使用javascript隐藏图像
- 在运行时使用jquery准备表体会导致设计问题
- 使用主题运行时portlet liferay时出现Javascript错误
- JavaScript运行时事件循环现有技术
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- angularjs ng点击运行时标记不起作用
- 如何在运行时更改react-native中的Navigator左键
- 在“运行时”从外部脚本加载React JS组件
- React-Native:运行时在webview中动态注入javascript
- 为什么添加<脚本>标签在运行时不加载javascript文件?(react.js)