JSXはReactでよく使用するJavaScript構文です。
慣れると便利な反面、最初はJavaScript内にHTMLが入っていて違和感を感じる方も多いのではないでしょうか?
そこで、本記事ではReactで使用するJSXについて解説します。
ぜひ参考にしてみてください!
JSXとは?
JSXとは、「JavaScript XML」の略であり、HTMLと似たような記述をすることができる「Javascriptの拡張構文」です。
JSXを使うと、div,p,ul,liなどのHTMLタグを使用することが可能です。
簡単な言葉で説明すると「ReactでHTMLを書くための構文」となります。
JSXの具体的な例として以下のコードとなります。
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
Javascriptの拡張構文なので、上記のコードは下記のコードにコンパイルされます。
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
引用元:React公式サイト
JSXの記法
では、実際にJSXの記法について解説します。
JSX に式を埋め込む
Javascriptの式を中括弧{}に囲むことによって JSX 内で使用できます。
以下の例では、name,age という変数を宣言して、名前と年齢を展開しています。
const name = '田中太郎';
const age = '30';
const element = <h1>私の名前は{name}です。年齢は{age}歳です。</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
表示結果は以下となります。
私の名前は田中太郎です。年齢は30歳です。
関数を使う場合は下記の記述をします。
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
引用元:React公式サイト
閉じタグに注意
br, imgなどの中身が空なタグには、「/>」で閉じる必要があります。
<div>
始めまして
<br />
田中です。
<img src="sample.jpg" />
</div>
コメントアウトの使い方
HTMLのコメントアウト形式は利用できません。
コメントアウト記述を中括弧{}で囲むことによって JSX 内で使用できます。
<div>
{/* コメントアウト */}
</div>
フラグメント
初心者が最初に躓くポイントにフラグメントがあります。
フラグメントとは、親要素を1つしか持つことができないことです。
以下の例を見ていきましょう。
下記は親要素が2つあるためエラーが発生します。
const error-test = (
<div> test1 </div>
<div> test2 </div>
);
下記のように全体を更に親要素で囲むことによってエラーは解消されます。
const success-test = (
<div>
<div> test1 </div>
<div> test2 </div>
</div>
);
ただ上記の方法では無駄なDOMが生成されてしまいます。
そのため、 <React.Fragment>を使います。
const success-test = (
<React.Fragment>
<div> test1 </div>
<div> test2 </div>
</React.Fragment>
);
<React.Fragment>を毎回記述するのは少々冗長なため、以下のように「<>」と省略する方法が一般的です。
const success-test = (
<>
<div> test1 </div>
<div> test2 </div>
</>
);
JSXの使い方
実際にJSXを使うための方法を解説します。
今回は「npm」を使った方法にて解説します。
※npmとは
precompile
npm i -g react-tools にてreact-toolsをインストールすることでjsxコマンドを使用することが可能です。
node-jsx
node-jsxを使うことで変換することも可能です。
requireしてinstallするだけで利用可能です。
require('node-jsx').install({harmony: true});
JSXを使う意味
JSXを使うことでHTMLに近い記述にてコードを書き進めることが可能なので、HTML構文を知っていれば、JSXでも記述が可能です。
下記からわかるように、JSXで記述した方が、非エンジニアやReactを学んでいない方にも分かりやすく、導入のハードルを下げることが可能です。
▼JSだけで記述した場合
React.DOM.div(null, 'test’')
▼JSXで記述した場合
<div>test</div>の方が...
まとめ
Reactを使うとなると、現状ではJSXを使うケースが一般的です。
JSXでは、JSだけ記述するより、コードの量が減らすことができ、HTML構造になっているため、コード全体の構造把握が容易なこともメリットといえます。