2016-12-10 5 views
3

いくつかのプロジェクトで共有/再利用したいコンポーネントがあります。私はこのコンポーネントをビルド/バンドルしようとしているので、通常は反応する大規模なセットアップ(webpack/babel/npm/ect)は必要としません。スタンドアロンリアックスコンポーネントとWebpack

  1. はhtmlページのどこかにCDNから/リアクトReactDOM含まれるように

    は私がしたいです。

  2. 私のコンポーネントのjsファイルを含めます(standalone.jsと呼んでいます)。
  3. これをdomに描画するための少しの初期化コード。バベル、ウェブパックなし、JSXなし。

それだけです。

私はアイテム3に固執していますが、かなり近づいているように感じます。コンポーネントをDOMにレンダリングする方法を理解できません。

index.htmlを(関連部分)

<div id="app" /> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react-dom.min.js"></script> 

<!--My Component --> 
<script src="build/standalone.js" type="text/javascript"></script> 
<script> 
    // I believe I'm doing something wrong here 
    var myComponent = new MyLibrary.default(); 
    var myStandaloneElement = React.createElement(myComponent, { message: "Testing Standalone Component" }); 
    ReactDOM.render(myStandaloneElement, document.getElementById('app')); 

</script> 

standalone.jsx

import React, {PropTypes} from 'react'; 

class Standalone extends React.Component { 
    render() { 
     return <p>{this.props.message}</p>; 
    } 
} 

Standalone.PropTypes = { 
    message: PropTypes.string.isRequired 
} 
export default Standalone; 

webpack.config:

ここでは、デモのHTMLページの関連部分です。 js(関連部分)

var config = { 
    entry: APP_DIR + '/standalone.jsx', 
    output: { 
     library: 'MyLibrary', 
     libraryTarget: 'umd', 
     path: BUILD_DIR, 
     filename: 'standalone.js' 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.jsx?/, 
       include: APP_DIR, 
       loader: 'babel' 
      } 
     ] 
    }, 
    externals: { 
     react: 'React', 
     "react-dom": 'ReactDOM' 
    }, 
} 

基本的なhtmlでコンポーネントをレンダリングしようとしていますが、私は同様のもののバリエーションを試しました。私のデバッガを見ると、オブジェクトは反応型のオブジェクトに「近い」ものであることが分かります。私はちょうどそれと何をするか分からない。

Chrome Debugger Output

任意のポインタは、あなたが新しい、むしろ彼らはReact.createElement工場でインスタンス化されるべきでコンポーネントをインスタンス化してはならない

答えて

2

を高く評価しました。私が使用することをお勧め開発中の(とのみ開発中!)ながら、サイドノートでは

... 
// get reference to my component constructor 
var myComponent = MyLibrary.default; 
var myStandaloneElement = React.createElement(myComponent, { message: "Testing Standalone Component" }); 
ReactDOM.render(myStandaloneElement, document.getElementById('app')); 
... 

デバッグを簡単にするために:だからあなただけ、youtは、HTMLの修正部分を見るのcreateElementの要素クラス/関数への参照を渡します非react.jsのバージョンを縮小さと反応し-dom.js、それらは例えば、node_modulesの下にあります。

<script src="/node_modules/react/dist/react.js"></script> 
<script src="/node_modules/react-dom/dist/react-dom.js"></script> 
0

あなたは、このようなhttps://www.npmjs.com/package/reactive-elements

と同じように、あなたがwebcomponentとしてコンポーネントに反応さらす検討する必要があります
<body> 
    <my-react-component item="{window.someValue}"></my-react-component> 
</body> 
関連する問題