reactjs - 如何在 polymer 组件内部使用 React?

标签 reactjs polymer web-component

似乎可以在 polymer 网络组件中使用 React,但我找不到有效的示例,只有 this ,但似乎已经过时了。

HTML

<link rel="import" href="http://www.polymer-project.org/components/polymer/polymer.html" />
<polymer-element name="my-polymer" constructor="" attributes="name">
    <template>
      <P>I AM {{name}}</P>
      <div id="reactContainer"></div>
    </template>
    <script type="text/jsx">
      /** @jsx React.DOM **/
      Polymer('my-polymer', {
        created: function(){},
        ready: function(){},
        attached: function(){},
        domReady: function(){
          React.renderComponent(<MyReact name="REACT INSIDE POLYMER"/>, this.$.reactContainer);
        },
        detached: function(){},
        attributeChanged: function(attrName, oldVal, newVal) {}
      });
    </script>
</polymer-element>
<my-polymer name="POLYMER"></my-polymer>

JS

/** @jsx React.DOM */
  var MyReact = React.createClass({
    render: function() {
      return (
        <p>I AM {this.props.name}</p>    
      );
    }
  });

最佳答案

您之前需要注意的主要事情是:

  • index.jsx 转换为 index.js javacript 形式 ( https://github.com/jsx/JSX )
    • babel --plugins transform-react-jsx
  • 将您的 ReactApp 与 Traceur Compiler、Babel、Rollup 或 webPack 捆绑在一起。由于浏览器尚未实现导入。

    • 确保您的主文件index.js不会渲染 react 。这将是 Polymer 的责任。

    • npm run build(通过 reac-redux 的 npm run build 获得)

index.js

import React from 'react'
import { render } from 'react-dom'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import App from './components/App'
import reducer from './reducers'

window.Render = render;
window.React = React;
window.CreateStore = createStore;
window.Provider = Provider;
window.App = App;
window.Reducer = reducer;

示例组件.html

  <link rel="import" href="../polymer/polymer-element.html">

  <dom-module id="example-component">
    <template>
    </template>

    <script src="./main.bundleFromReact.js"></script>

    <script>
     class ExampleComponent extends Polymer.Element {
        static get is() { return 'example-component'; }

        ready() {
          super.ready();
          const store = CreateStore(Reducer);

          Render(
            React.createElement(
              Provider,
              {store: store},
              React.createElement(
                App,
                null
              )
            ),
            this.shadowRoot
          );
        }
      }
      window.customElements.define(ExampleComponent.is, ExampleComponent);
      </script>
   </dom-module>

tl;博士

您可以在此处查看我最简单的示例,无需导入:

<link rel="import" href="../polymer/polymer-element.html">
<script src="../react/react.min.js"></script>
<script src="../react/react-dom.min.js"></script>

<dom-module id="example-component">
   <template></template>

   <script>
     class HelloMessage extends React.Component {
       render() {
         return React.createElement(
           'div',
           {}, `Hello ${this.props.name}`);
       }
     }

     class ExampleComponent extends Polymer.Element {
     static get is() { return 'example-component'; }

     ready() {
       super.ready();

       var mountPoint = document.createElement('span');
       this.shadowRoot.appendChild(mountPoint);

       ReactDOM.render(
         React.createElement(HelloMessage, {name: 'Maestro'}),
         mountPoint
       );
     }
  }

  window.customElements.define(ExamplComponent.is, ExamplComponent);
</script>

关于reactjs - 如何在 polymer 组件内部使用 React?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175599/

相关文章:

javascript - 使用连接到容器组件转换无状态组件 - 优化

javascript - 我必须点击两次才能重新渲染我的更新状态,并且回调函数不起作用

reactjs - Material UI <IconButton> 未显示

javascript - 如何在 Polymer 中中止 core-ajax

javascript - 具有多个独立组件的 UI 架构

node.js - 如何使用 useEffect 和 Context API 检查用户是否登录并保护路由?

polymer - 动态添加铁 list 及其所有数据

javascript - polymer 1.x : get/return property values for no related elements

javascript - 将 Stackblitz HelloComponent 转变为 Web 组件?

javascript - 如何在 Polymer 元素定义中分配 HTML 实体?