Day 1・JSXとコンポーネント — 部品を作って渡す
JSXの読み方 — HTMLそっくりだが実はJavaScript
JSXはHTMLに見えるが正体はJavaScript。{}の中に変数や式を書けること、classNameなどの違いを読み取れるようになる。
HTMLに見える。でも実体はJavaScript
Reactのコードを開くと、JavaScriptファイルの中に<p>や<div>といったHTMLらしきものが直接書いてあって驚くかもしれません。これがJSXです。見た目はHTMLそっくりですが、正体はJavaScript。ブラウザに届く前に、裏で「画面を組み立てるJSの命令」へ変換されます。だから『HTMLの顔をしたJS』と思って読むのがコツです。
function Hello() {
return <p>こんにちは、Reactの世界へ</p>;
}returnの後ろに書いた<p>...</p>が、この関数の「見た目」です。関数が値を返すのと同じ感覚で、Reactの部品は「画面の一部」を返します。文字列を返すのではなく、画面の構造を返している、と読み替えてください。
{}の中にはJavaScriptを書ける
JSXがただのHTMLと決定的に違うのは、波かっこ{}の中にJavaScriptの変数や式を差し込めることです。{}は『ここからはJSですよ』という切り替えスイッチだと考えてください。文字を埋め込むだけでなく、足し算や関数呼び出しの結果も書けます。
function Price() {
const yen = 1200;
return <p>お値段は {yen} 円、税込 {Math.round(yen * 1.1)} 円です</p>;
}なぜHTMLとJSを混ぜるのか
昔は「見た目(HTML)」と「動き(JS)」をファイルごとに分けるのが常識でした。でも実際は『このボタンが押されたらこの表示が変わる』のように見た目と動きは強く結びついています。JSXは関連するものを1か所にまとめることで、読むときに視線があちこち飛ばず、部品として理解しやすくします。
HTMLとの小さな違い: className と閉じタグ
JSXはJavaScriptなので、HTMLの一部の書き方がそのままは使えません。代表がclassです。classはJavaScriptの予約語(クラス構文で使う)なので、JSXではclassNameと書きます。見た目はほぼ同じでも、名前が違う点に気づけると読み間違いが減ります。
// HTMLでは class だが、JSXでは className
function Badge() {
return <span className="badge">NEW</span>;
}閉じタグを忘れない
HTMLでは<br>や<img>を閉じなくても許されましたが、JSXでは必ず閉じる必要があります。<br />や<img src="..." />のように、末尾にスラッシュを付けた『自己完結タグ』にしてください。閉じ忘れはReactでよく出るエラーの筆頭です。AIの生成コードでも稀に抜けるので、読むときに閉じているか確認する癖をつけると安全です。
returnで返せるのは「1つのかたまり」だけ
JSXを読むときにもう1つ知っておきたいのが、関数がreturnで返せるJSXは『必ず1つの親要素にまとまっている』というルールです。並んだ要素をそのまま2つ返すことはできません。だからReactのコードでは、中身を<div>や<>...</>(フラグメント)で1つに包んでいる形がよく出てきます。『いちばん外側を1枚の入れ物で包む』のがJSXの決まり、と読み替えてください。
// これはエラー: 親がなく、2つを並べて返している
function Ng() {
return (
<h1>タイトル</h1>
<p>本文</p>
);
}// OK: <> </> (フラグメント)で1つに包む
function Ok() {
return (
<>
<h1>タイトル</h1>
<p>本文</p>
</>
);
}JSXの読み方まとめ
JSXを読むときは4点を意識すると迷いません。(1)見た目はHTMLでも実体はJavaScript、(2){}の中はJSの変数や式が入る、(3)classではなくclassNameなどHTMLと少し違う属性名がある、(4)<br />のように自己完結タグは閉じる・全体は1つの親でまとめる。この4つが分かれば、たいていのReactの見た目コードは読み解けます。
AIにはこう聞く
「このJSXを一行ずつ日本語で説明して。{}の中がJavaScriptとして何をしているか、HTMLと違う書き方(classNameなど)があればそこも教えて」と頼むと、JSXを読む力が早く育ちます。
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、実務で説明できる状態に一歩近づきます。
JSXの説明として最も適切なものはどれですか。
「JSXの{}には何を書けるのか」を、HTMLしか知らない人にも伝わるように説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。