R初めてのReact

Day 1JSXとコンポーネント — 部品を作って渡す

JSXの読み方 — HTMLそっくりだが実はJavaScript

JSXはHTMLに見えるが正体はJavaScript。{}の中に変数や式を書けること、classNameなどの違いを読み取れるようになる。

HTMLに見える。でも実体はJavaScript

Reactのコードを開くと、JavaScriptファイルの中に<p>や<div>といったHTMLらしきものが直接書いてあって驚くかもしれません。これがJSXです。見た目はHTMLそっくりですが、正体はJavaScript。ブラウザに届く前に、裏で「画面を組み立てるJSの命令」へ変換されます。だから『HTMLの顔をしたJS』と思って読むのがコツです。

TSX
function Hello() {
  return <p>こんにちは、Reactの世界へ</p>;
}
関数がJSX(HTMLに見えるJS)を返している。これがReactの一番小さな部品。

returnの後ろに書いた<p>...</p>が、この関数の「見た目」です。関数が値を返すのと同じ感覚で、Reactの部品は「画面の一部」を返します。文字列を返すのではなく、画面の構造を返している、と読み替えてください。

{}の中にはJavaScriptを書ける

JSXがただのHTMLと決定的に違うのは、波かっこ{}の中にJavaScriptの変数や式を差し込めることです。{}は『ここからはJSですよ』という切り替えスイッチだと考えてください。文字を埋め込むだけでなく、足し算や関数呼び出しの結果も書けます。

TSX
function Price() {
  const yen = 1200;
  return <p>お値段は {yen} 円、税込 {Math.round(yen * 1.1)} 円です</p>;
}
{yen} で変数を、{Math.round(...)} で式の結果を画面に埋め込んでいる。

なぜHTMLとJSを混ぜるのか

昔は「見た目(HTML)」と「動き(JS)」をファイルごとに分けるのが常識でした。でも実際は『このボタンが押されたらこの表示が変わる』のように見た目と動きは強く結びついています。JSXは関連するものを1か所にまとめることで、読むときに視線があちこち飛ばず、部品として理解しやすくします。

HTMLとの小さな違い: className と閉じタグ

JSXはJavaScriptなので、HTMLの一部の書き方がそのままは使えません。代表がclassです。classはJavaScriptの予約語(クラス構文で使う)なので、JSXではclassNameと書きます。見た目はほぼ同じでも、名前が違う点に気づけると読み間違いが減ります。

TSX
// HTMLでは class だが、JSXでは className
function Badge() {
  return <span className="badge">NEW</span>;
}
class ではなく className。JSXがJSであることの表れ。

閉じタグを忘れない

HTMLでは<br>や<img>を閉じなくても許されましたが、JSXでは必ず閉じる必要があります。<br />や<img src="..." />のように、末尾にスラッシュを付けた『自己完結タグ』にしてください。閉じ忘れはReactでよく出るエラーの筆頭です。AIの生成コードでも稀に抜けるので、読むときに閉じているか確認する癖をつけると安全です。

AIにはこう聞く

「このJSXを一行ずつ日本語で説明して。{}の中がJavaScriptとして何をしているか、HTMLと違う書き方(classNameなど)があればそこも教えて」と頼むと、JSXを読む力が早く育ちます。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

JSXの説明として最も適切なものはどれですか。

Q2

「JSXの{}には何を書けるのか」を、HTMLしか知らない人にも伝わるように説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。