R初めてのReact

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

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の生成コードでも稀に抜けるので、読むときに閉じているか確認する癖をつけると安全です。

returnで返せるのは「1つのかたまり」だけ

JSXを読むときにもう1つ知っておきたいのが、関数がreturnで返せるJSXは『必ず1つの親要素にまとまっている』というルールです。並んだ要素をそのまま2つ返すことはできません。だからReactのコードでは、中身を<div>や<>...</>(フラグメント)で1つに包んでいる形がよく出てきます。『いちばん外側を1枚の入れ物で包む』のがJSXの決まり、と読み替えてください。

TSX
// これはエラー: 親がなく、2つを並べて返している
function Ng() {
  return (
    <h1>タイトル</h1>
    <p>本文</p>
  );
}
トップレベルに要素が2つ並んでいる。JSXはこれを返せない。
TSX
// OK: <> </> (フラグメント)で1つに包む
function Ok() {
  return (
    <>
      <h1>タイトル</h1>
      <p>本文</p>
    </>
  );
}
<> </> は「余計なタグを増やさずに1つにまとめる」ための空の入れ物。

JSXの読み方まとめ

JSXを読むときは4点を意識すると迷いません。(1)見た目はHTMLでも実体はJavaScript、(2){}の中はJSの変数や式が入る、(3)classではなくclassNameなどHTMLと少し違う属性名がある、(4)<br />のように自己完結タグは閉じる・全体は1つの親でまとめる。この4つが分かれば、たいていのReactの見た目コードは読み解けます。

AIにはこう聞く

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

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

理解度チェック

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

Q1

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

Q2

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

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