実際、それにはいくつかの方法があります。
プロップ内でJSXを使用したい
単に{}を使用して、JSXにパラメータを解析させることができます。唯一の制限は、すべてのJSX要素と同じです。ルート要素を1つだけ返す必要があります。
myProp={<div><SomeComponent>Some String</div>}
このための最も読みやすい方法は、JSXコンポーネントを返す関数renderMyPropを作成し(標準のレンダー関数のように)、次にmyProp = {this.renderMyProp()}を呼び出すだけです。
HTMLのみを文字列として渡したい
デフォルトでは、JSXでは文字列値から生のHTMLをレンダリングできません。ただし、それを行う方法があります。
myProp="<div>This is some html</div>"
次に、コンポーネントでそれをそのように使用できます:
<div dangerouslySetInnerHTML=myProp={{ __html: this.renderMyProp() }}></div>
このソリューションは、クロスサイトスクリプティングフォージェリ攻撃に対して「開く」ことができることに注意してください。また、レンダリングできるのは単純なHTMLのみであり、JSXタグやコンポーネント、その他の凝ったものはレンダリングされないことに注意してください。
アレイウェイ
反応では、JSX要素の配列を渡すことができます。つまり:
myProp={["This is html", <span>Some other</span>, "and again some other"]}
次の理由により、この方法はお勧めしません。
- 警告が表示されます(キーがありません)
- 読めない
- これは実際にはJSXの方法ではなく、意図した設計というよりはハックです。
子供の道
完全を期すために追加しますが、反応すると、コンポーネントの「内部」にあるすべての子を取得することもできます。
だから私が次のコードを取る場合:
<SomeComponent>
<div>Some content</div>
<div>Some content</div>
</SomeComponent>
その後、2つのdivは、SomeComponentのthis.props.childrenとして使用可能になり、標準の{}構文でレンダリングできます。
このソリューションは、コンポーネントに渡すHTMLコンテンツが1つしかない場合に最適です(Popinのコンテンツのみを子として取得するPopinコンポーネントを想像してください)。
ただし、複数のコンテンツがある場合は、子を使用できません(または、少なくともここで別のソリューションと組み合わせる必要があります)