JSXの嵌まりどころ

JSXはHTMLのように見えますが、幾つかの重要な違いが存在します。

注意:
インラインstyle属性のようなDOMの違いについては、こちらを参照して下さい。

HTML実体参照

JSXのリテラルのテキストにHTML実体参照を挿入することが可能です。

<div>First &middot; Second</div>

動的なコンテンツ内にHTML実体参照を表示したい場合、デフォルトでReactが広範囲に及びXSS攻撃を防護するために、 表示する全ての文字列に対してエスケープ処理を行うため、二重エスケープの問題が発生します。

// 悪い例: "First &middot; Second"と表示される
<div>{'First &middot; Second'}</div>

この問題を回避する方法が幾つか存在します。 最も簡単な方法は、Unicode文字をJavaScript内に直接書くことです。 それにはUTF-8としてファイルを保存し、適切にUTF-8の指定を設定する必要があります。 それを行えばブラウザで正しく表示されるはずです。

<div>{'First · Second'}</div>

これに代わるより安全な方法は、実体参照に対応するUnicode番号を見つけ、 JavaScript文字列の内部でそれを使用することです。

<div>{'First \u00b7 Second'}</div>
<div>{'First ' + String.fromCharCode(183) + ' Second'}</div>

文字列とJSXが混ざった配列を使用することが可能です。

<div>{['First ', <span>&middot;</span>, ' Second']}</div>

最終手段として、生のHTMLを直接挿入してしまう方法もあります。

<div dangerouslySetInnerHTML={{__html: 'First &middot; Second'}} />

カスタムHTML属性

HTMLの使用には存在しないプロパティをネイティブのHTML要素に渡しても、Reactはこれを描画しません。 もしカスタム属性を使用したいのであれば、data-接頭辞を付けるべきです。

<div data-custom-attribute="foo" />

aria-で始まるWebアクセスビリティの属性は適切に描画されます。

<div aria-hidden={true} />

 Back to top

© 2013-2017 Facebook Inc.
Documentation licensed under CC BY 4.0.

このページは、ページトップのリンク先のReact内のページを翻訳した内容を基に構成されています。 下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • ドキュメントの情報が古い可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。