如何在其他域上嵌入react组件?

时间:2018-03-08 10:41:10

标签: javascript reactjs webpack ecmascript-6 embedding

我创建了一个简单的React组件。我希望该组件用作插件或小部件。我从Writing embeddable Javascript plugin with React & Webpack获得了帮助,并设法将我的webpack设置如下:

output: {
    path: __dirname + '/dist',
    filename: './app/components/FirstWidgetIndex.js',
    publicPath: '/',
    library: 'tracking',
    libraryTarget: 'umd',
    umdNamedDefine: true,
  }

我的组件如下:

import React, { Component, PropTypes } from 'react';

export default class FirstWidget extends Component {

    constructor() {
        super();
    }

    render() {

        return (
            <div className="setting-fullpage">
                <p>React Widget</p>
            </div>
        )
    }
}

const mapStateToProps = state => {
    //
}

module.exports = FirstWidget

我的FirstWidgetIndex文件(webpack的入口点)如下:

import React, { Component, PropTypes } from 'react';
import { render } from 'react-dom';
import App from './FirstWidget.js';

render(
  <App />,
  document.getElementById('app')
);

现在,我想将此FirstWidget添加为可嵌入的小部件。我在html文件中的第三方域名上调用它,如下所示:

<html>
    <head>
        <script type="text/jsx" src="https://mydomain/firstWidget"></script>
    </head>
    <body>
        <p>Testing React Widget</p>
        <div id='app'></div>
    </body>
</html>

但它没有在html页面上呈现我的小部件。如果我遗失任何东西,有人可以建议吗?

1 个答案:

答案 0 :(得分:2)

你需要知道反应会在哪里呈现,例如:

<强> FirstWidget.js

import React, { Component } from 'react';

export default class FirstWidget extends Component {
  render () {
    return (
      <h1>Hello world</h1>
    );
  }
}

<强> index.js

这是你在webpack中的切入点

import React from 'react';
import { render } from 'react-dom';

import App from './FirstWidget.js';

render(
  <App />,
  document.getElementById('app')
);

在您的 index.html 中,您需要拥有app id的标记。

<div id='app'></div>
  

注意:index.js中的代码必须与上面的代码类似,它应该是webpack配置中的入口点。