是否可以创建嵌入式 React 应用小部件?

Mic*_*ato 6 javascript wordpress reactjs

我想创建一个可以嵌入到不同 WordPress 网站的小部件。例如,构建抵押计算器并添加功能,例如使用输入的信息创建可下载的 PDF。

是否可以通过反应来做到这一点?更具体地说,使用 create-react-app 工具。

先感谢您!

Kir*_*hxh 9

可以创建可嵌入反应的小部件,但这create-react-app不是正确的工具。

共享已编译的 js 包并在浏览器中使用它的最简单方法是将其打包为 UMD 格式。不过,create-react-app 不支持。从技术上讲,您可以从 create-react-app 导入一个包作为小部件,但这很痛苦。有些人通过解析应用程序清单来做到这一点,而另一些人则通过将索引 html 内容复制到目标页面中来做到这一点。大多数情况下,小部件获取输入数据,您将很难使用这些技术。

我建议你使用另一种支持 UMD 开箱即用的构建系统,如parcel/babel(最简单的)、webpack/babel、nwb 等。这里是 react 官方关于编译链的建议。

这是一个index.js可用于声明小部件的示例文件:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';

window.MyWidget = function(idElement, param1, param2) {
    let config = {param1, param2};
    ReactDOM.render(<App config={config} />, document.getElementById(idElement));
    return this;
}
Run Code Online (Sandbox Code Playgroud)

然后可以将小部件实例化到目标页面中:

<body>
  <div id="react-widget">

  <script src="http://cdm.com/my-react-widget-bundle.js"></script>
  <!-- if bundled separately, load the css -->
  <script>
    window.addEventListener("DOMContentLoaded", function(event) {
      new MyWidget("#react-widget", "toto", "tata");
    });
  </script>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)


dhu*_*son 1

ReactDOM.render 的第二个参数是渲染目标。它可以位于页面上的任何位置。

ReactDOM.render(element, document.getElementById('widgetTarget'));
Run Code Online (Sandbox Code Playgroud)