私はLaravel 5.4とReact 15.5.4を使用していますが、コードはES6で記述しています。LaravelブレードテンプレートのReactJSコンポーネントへの呼び出し
私はVueを置き換えてReactを使いたいと思いました。しかし、私はしばしばブレードテンプレートの異なる場所で例2のような小さなコンポーネントを使用します。私は1つのアプリコンポーネントを使いたくない。私は、自動的にそれを行うことはできません
<span class="react">
<TestComponent property={true} />
</span>
:
は、私のような用途に何かをしたいと思います。今、私は
<span data-component="TestComponent" data-props="{property:true}" />
を使用してapp.js
_.each(document.querySelectorAll('[data-react]'), element => {
let props ={};
Array.prototype.slice.call(element.attributes)
.forEach(item => {
props[item.name] = item.value;
if(item.name !== 'data-react'){
element.removeAttribute(item.name);
}
});
ReactDOM.render(React.createElement(reactComponents[element.getAttribute('data-react')],props),element);
});
にそれは動作しますが、私は1つに、すべてのプロパティを追加使用する必要があるコンポーネントのプロパティを反応させ、その後、私はまた、例えばthis.props.out.propery
を考え使用します私のブレードコンポーネントに設定された通常のコンポーネントタグのようなもの
私はapp.jsで試してみました
_.each(document.querySelectorAll('.react'), item => {
ReactDOM.render(item.children,item);
});
誰かがこの問題を解決する考えですか?
<span data-react="LoginForm" input="{{json(request()->old())}}" error="{{session('error')}}" errors="{{json($errors->getMessages())}}" />
または
<LoginForm data-react="LoginForm" input="{{json(request()->old())}}" error="{{session('error')}}" errors="{{json($errors->getMessages())}}" />
ブレード内と
resources/assets/js/app.js
中:
EDIT
私はに私の解決策を変更しました
var reactComponents = {
LoginForm: require('./components/login').default,
};
_.each(document.querySelectorAll('[data-react]'), element => {
let props ={};
Array.prototype.slice.call(element.attributes)
.forEach(item => {
props[item.name] = item.value;
});
ReactDOM.render(React.createElement(reactComponents[element.getAttribute('data-react')],props),element);
});
正常に動作します。これは非常に明確な解決策ではありませんが、私はその合理的な印象を持っています。 JSXのように、コンポーネント名をhtmlコードに設定し、小道具を追加することができます。
ありがとう、私はコンポーネント名を自動的に呼び出し、htmlタグ内にpropsを設定したいと思います。私は私のポストの編集で私のソリューションを追加しました – jaroApp