2015-10-21 15 views
10

ReactクラスでHTML(JSX)文字列をレンダリングする必要があります。これが可能かどうかわかりません。 dangerouslySetInnerHTMLは、このファイル内に異なる反応コンポーネントがあるため、私には無効です。プレーンなHTMLではありません。ReactでJSXを使用して文字列をレンダリングする方法

私が期待される結果との例があります。 https://jsfiddle.net/86rg50re/1/

var MyComponent = React.createClass({ 
    propTypes: { 
     owner: React.PropTypes.string 
    }, 

    render: function() { 
     return <div>Congrats {this.props.owner}! you have rendered MyComponent ({this.props.children})</div>; 
    } 
}); 

var Hello = React.createClass({ 
    render: function() { 
     return <div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>; 
    } 
}); 

しかし、私が持っていることはこれです:

var Hello = React.createClass({ 
    render: function() { 
     var content = '<div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>'; 
     return transformStringToJSX(content); 
    } 

明らかtransformStringToJSXが存在しません。

jsx文字列をレンダリングする方法はありますか?

+0

ファイルをJavaScriptファイルとしてインポートして、他のインポートと同様に変数やコンポーネントを参照することはできませんでしたか? – Bojangles

+0

それは私の最後の選択肢だと思います。私はそのファイルにJSXコンテンツだけを保存したいので、別のオプションが好きです。 – gyss

+0

JSXはJavaScriptにすぎません。私はあなたの最善の策は、薄いラッピングコンポーネントをエクスポートし、それをJSとしてインポートすることだと思います。 – Bojangles

答えて

9

あなたはあなたのコードに続いて

var babel = require('babel-core'); 
var Component = eval(babel.transform('<div><MyComponent /></div>').code); 

をそれ

npm install --save babel-core 

を変換するためにバベルを使用することができ、それが実行可能なコードに文字列を変換するために、一般的にbad ideaであることに注意してください。

+0

こんにちはahmohl!それは、バベルのパッケージで動作していない、あなたは 'バベルコア'を使用する必要があります。とにかく、私のレンダリング機能内で "コンポーネント"を使用すると、エラーがスローされます。 – gyss

+0

これは私がやろうとしているのと似たものです。しかし、単一のコンポーネントではなく、JSXを含む文字列全体:https://github.com/facebook/react/issues/3365 – gyss

+1

'eval(babel.transform(yourComponentString).code);'を使うと、それは動作します。しかし、私はあなたがしようとしていることをお勧めします悪いJSの練習文字列をコードに変換することです。 – hampusohlsson

関連する問題