【10分でわかる】React JSXの書き方完全ガイド|HTMLとの違いと初心者がつまずくポイント

React JSXの書き方完全ガイド

はじめに|なぜJSXの記事を書こうと思ったのか

Reactを学び始めたときに最初にぶつかる壁が「JSXって何?」だと思います。

僕自身も

「なんでHTMLっぽいのにJavaScriptの中で書けるの?」

「結局これはHTMLなの?違うの?」

と混乱しました。

この記事では、Reactを学ぶ上で避けて通れない JSX(JavaScript XML) の基本を、初心者の方でも迷わないように丁寧に解説します。


JSXとは何か?

React JSXとは何か?

JSXとは、JavaScriptの中でXML風の構文(HTMLに似た書き方)を使えるようにしたものです。

そたや

JSXは、Facebook社がReactのために作った構文拡張(シンタックス拡張)になります

通常のJavaScriptでは、DOMをこう書きます。

const element = React.createElement('h1', null, 'Hello, world!');

これをJSXで書くと、こんなにスッキリします。

const element = <h1>Hello, world!</h1>;

見た目はHTMLに近いですが、中身はJavaScriptに変換されているという点を忘れないでください。


JSXとHTMLの違い

1. 属性名の違い

class → className
for → htmlFor

HTMLの例

<label for="username">名前</label>

JSXの例

<label htmlFor="username">名前</label>

for は JavaScript の予約語のため htmlFor を使います。


2. 属性はキャメルケース

HTMLは小文字で書きますが、JSXでは JavaScript の命名規則に合わせてキャメルケースにします。

onclick → onClick
tabindex → tabIndex

HTMLの例

<button onclick="handleClick()">Click</button>
<input tabindex="0" />

JSXの例

<button onClick={handleClick}>Click</button>
<input tabIndex={0} />

3. 値は文字列ではなく {} で囲む

HTMLの例

<a href="https://example.com">リンク</a>

JSXの例

const url = "https://example.com";

<a href={url}>リンク</a>

4. JavaScript式を直接埋め込める

JSXの例

const isLoggedIn = true;

return (
  <div>
    {isLoggedIn ? <p>ログイン中</p> : <p>ログインしてください</p>}
  </div>
);

5. 必ず閉じタグが必要

HTMLの例

<br>
<img src="logo.png">

JSXの例

<br />
<img src="logo.png" />

6. 属性値は基本的にクォーテーション不要

数値や真偽値を渡す場合、文字列ではなくそのまま書けます。

JSXの例

<input type="text" maxLength={10} disabled={true} />
<input type="text" maxLength={10} disabled />

7. 複数要素は親タグでラップする必要がある

NG例

return (
  <h1>Hello</h1>
  <p>World</p>
);

OK例(divでラップ)

return (
  <div>
    <h1>Hello</h1>
    <p>World</p>
  </div>
);

OK例(Fragmentでラップ)

return (
  <>
    <h1>Hello</h1>
    <p>World</p>
  </>
);

8. コメントの書き方が違う

HTMLの例

<!-- これはコメント -->

JSXの例

return (
  <div>
    {/* これはコメント */}
    <p>Hello JSX</p>
  </div>
);

9. スタイル指定はオブジェクト

HTMLの例

<p style="color: red; font-size: 20px;">赤文字のテキスト</p>

JSXの例

const style = { color: 'red', fontSize: '20px' };

<p style={style}>赤文字のテキスト</p>


JSXとHTMLの違い一覧表

機能HTMLJSX
クラス指定classclassName
for属性forhtmlFor
属性名小文字キャメルケース
自己終了タグ<br><br />
コメント<!-- -->{/* */}
スタイルstyle="color:red;"style={{ color: 'red' }}
属性値文字列{}で式を書ける
複数要素OK親要素 or Fragmentでラップ

JSXを使うメリット

  1. 可読性が高い:HTMLに近い見た目で直感的に理解できる
  2. 柔軟性がある:JavaScriptの式を組み込める
  3. エラーが減る:JSXはコンパイル時にチェックされるのでタイプミスが早く見つかる

JSXのつまずきポイント

React JSX | つまずきポイント

初心者(自分含め..)がよく混乱するポイントをまとめてみました!

1. class ではなく className を使う

NG例

<div class="container">Hello</div>

OK例

<div className="container">Hello</div>

2. 属性名はキャメルケース(onClick, tabIndex など)

NG例

<button onclick="handleClick()">Click</button>
<input tabindex="0" />

OK例

<button onClick={handleClick}>Click</button>
<input tabIndex={0} />

3. 複数要素を返すときは必ず親要素でラップする必要がある

NG例

return (
  <h1>Hello</h1>
  <p>World</p>
);

OK例(divでラップ)

return (
  <div>
    <h1>Hello</h1>
    <p>World</p>
  </div>
);

OK例(Fragmentでラップ)

return (
  <>
    <h1>Hello</h1>
    <p>World</p>
  </>
);

4. 自己終了タグが必要

NG例

<img src="logo.png">
<br>

OK例

<img src="logo.png" />
<br />

5. JavaScript式を文字列として書いてしまう

NG例

const name = "React";

<p>"{name}"</p>

OK例

const name = "React";

<p>{name}</p>


まとめ|JSXを理解するとReactが一気に書きやすくなる

JSXはReactの基礎ですが、HTMLと似ているからこそ混乱しやすい部分です!

ポイントは、「JSXはHTMLではなく、JavaScriptの拡張構文」 という意識を持つこと。

  • 見た目はHTMLっぽい
  • 実態はJavaScriptに変換されている
  • 書き方はHTMLと少し違う(className, onClick, {} など)

これさえ押さえれば、Reactのコードがぐっと読みやすくなるはずです!


関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です