【実務・中級編】 JSXの基本構文とJavaScript式 – React実践ガイド

JSXはただの「糖衣構文」。裏側で何が起きているかを知れば、コードはもっと洗練される。

やあ。Reactを使っていて「JSXを書くのは当たり前」になっていないか?
中級者へのステップアップとして一番大事なのは、「自分が書いているJSXが、最終的にどういうJSの関数に変換されているか」を脳内で透過的に見られるようになることだ。

今日は、JSXの「波括弧 `{}`」の正体と、現場でついついやってしまう「アンチパターン」を回避するための現実的な知見を共有しようと思う。

—

1. JSXは「魔法」ではなく「関数呼び出し」だ

まず、大前提を叩き込んでおいてほしい。ブラウザはJSXなんて1ミリも理解できない。ブラウザが実行するのは、あくまでピュアなJavaScriptだけだ。

Reactのビルドツール(BabelやSWC)は、あなたが書いたJSXをこんな風に変換している。

// あなたが書くJSX
const element =

Hello, World!

;

// ビルド後の姿(React.createElement)
const element = React.createElement(
“h1”,
{ className: “title” },
“Hello, World!”
);

この `React.createElement` が生成するのは、DOMそのものではなく、「UIの構成要素を記述したただのプレーンなJavaScriptオブジェクト」だ。これがReactの仮想DOMの正体である「React Element」になる。

「JSXはXMLライクな構文で、JS式を波括弧で囲む」というルールは、この関数呼び出しの引数にどうデータを渡すかというルールに他ならない。

—

2. 波括弧 `{}` の中身は「式」でなければならない

ここからが実務の話だ。JSXの中で `{ }` を使うとき、初心者がよくやる間違いが「文(Statement)」を突っ込もうとすることだ。

JSXの波括弧内には「値として評価されるJavaScriptの式(Expression)」しか書けない。`if`文や `for`ループのような「文」は書けないんだ。

実務で頻出する「綺麗に書く」ためのパターン

現場でよく見る「汚いコード」を、Reactらしい「クリーンなコード」に書き換える手法を伝授しよう。

const UserProfile = ({ user }) => {
// NG: JSXの中でif文は使えない。
// NG: { if(user) { return

{user.name}

} } // これはビルドエラーになる

// OK: 三項演算子を使う(最も一般的)
// OK: 論理演算子(&&)を使う(条件が単一の場合)

return (

{/ ユーザーが存在する場合のみ名前を表示 /}
{user &&

{user.name}

}

{/ 条件分岐による表示の切り替え /}
{user.isPremium ? (
プレミアム会員
) : (

)}

);
};

プロのTip: `&&` の落とし穴

`{count && }` のような書き方は多用するだろう。だが、`count` が `0` の場合、Reactは `0` を画面にレンダリングしてしまう。
安全を期すなら `{!!count && }` とするか、三項演算子を使うのが「事故らない」現場の流儀だ。

—

3. リストレンダリングの最適化:そのキーは「何のため」にあるのか

JSXで最もミスが起きやすいのがリスト表示だ。

const UserList = ({ users }) => {
return (

    {users.map((user) => (
    // keyにはindexを安易に使わないこと。
    // リストの順序が変わったり、削除・追加がある場合にバグの温床になる。

  • {user.name}
  • ))}

);
};

なぜ `key` が必要なのか。それはReactが「どの要素が追加・削除されたかを、仮想DOMの差分比較(Reconciliation)で効率的に特定するため」だ。
`index` をキーにすると、配列の途中に要素が挿入された瞬間、Reactは「すべての子要素が変わった」と誤解して再描画コストが跳ね上がる。これ、パフォーマンスチューニングの初歩の初歩だが、意外と見落とされているぞ。

—

まとめ:結局、何が言いたいのか

1. JSXは単なる `React.createElement` の糖衣構文。 深く考えすぎず、でも裏側を意識して書くこと。
2. `{ }` の中身は式だけ。 `if` や `for` で迷ったら、JSXの外で変数に代入するか、三項演算子で解決する。
3. `key` は単なる識別子ではない。 コンポーネントのライフサイクルを制御する「指紋」だと心得よ。

フロントエンドの技術は日進月歩だが、このJSXの基本ルールはReactが続く限り変わらない不変の真理だ。

明日からのコードレビューで、誰かの書いた `if` がJSXの中に紛れ込んでいたら、ニヤリと笑って教えてやってくれ。それが、チーム全体の技術レベルを底上げする、お前というシニアエンジニアの役割だ。

また何か詰まったら聞きに来い。現場からは以上だ。

コメント

タイトルとURLをコピーしました