--- id: jsx-in-depth title: JSXの深層 permalink: jsx-in-depth-ja-JP.html prev: displaying-data-ja-JP.html next: jsx-spread-ja_JP.html --- [JSX](https://facebook.github.io/jsx/)はXMLに似たJavaScriptのシンタックスの拡張です。Reactでは、単純なJSXのシンタックスの変換を使うことができます。 ## なぜJSXを使うのでしょうか? ReactでJSXの使用を強制されるわけではありません。生のJSを使うこともできます。しかし、JSXは簡潔で、木構造とReactの特性を定義しやすいシンタックスであるため、JSXを使うことをお勧めします。 デザイナーのようなカジュアルな開発者にとってはさらに馴染みやすいでしょう。 XMLにはバランスの取れた開始タグと終了タグという利益があります。このことで、関数がオブジェクトリテラルを呼んでいるのを読むよりも簡単に大きな木構造を作ることができます。 これはJavaScriptのセマンティックスを代替するものではありません。 ## HTMLタグ対Reactコンポーネント ReactはHTMLタグ(文字列)とReactコンポーネント(クラス)の両方をレンダリングすることができます。 以下のようにJSXで小文字のタグ名を使用するだけで、HTMLタグをレンダリングできます。 ```javascript var myDivElement =
; ReactDOM.render(myDivElement, document.getElementById('example')); ``` 以下のように大文字から始まるローカル変数を作成するだけで、Reactのコンポーネントをレンダリングできます。 ```javascript var MyComponent = React.createClass({/*...*/}); var myElement = ; ReactDOM.render(myElement, document.getElementById('example')); ``` ReactのJSXは大文字と小文字を使うことで、ローカルのコンポーネントクラスとHTMLタグを識別する習慣があります。 > 注意: > > JSXはJavaScriptなので、 `class` や `for` といった識別子はXMLの属性名としては使用しません。代わりに、 ReactのDOMコンポーネントはDOMのプロパティ名がそれぞれ `className` や `htmlFor` といったものであることを期待します。 ## The Transform ReactのJSXはXMLに似たシンタックスをネイティブなJavaScriptに変換します。XML要素や属性や子要素は `React.createElement` で渡される引数に変換されます。 ```javascript var Nav; // 入力 (JSX): var app =