Reactでよく使うJSX。
HTMLでのマークアップが体に染み付きすぎてなかなかJSXに慣れなかったので、覚えておきべきポイントを自分用にまとめました。
とにかく、公式ドキュメントを見るべし見るべし。
目次
ざっくりJSXの書き方の特徴
マークアップ自体は概ねHTMLと同じ構造
ところどころ書き方が異なるので、HTMLでマークアップした内容をJSXに変換するイメージ。(最初の頃はね)
慣れないうちはコンバータを使ってもいいのかも。

全ての要素タグは閉じる
<div>
や<p>
、<ul>
などのように、もともと閉じタグ</*>
があるものは変わらないが、<img>
や<input>
のようにHTMLでは不要なものにも閉じタグは必要。
return (
<div>
<h1>Hello, World!</h1>
<img
src="XXX/XXX.jpg"
alt="画像の説明"
className="photo"
/>
<input
type="text"
value={inputText}
onChange={ ... }
placeholder="入力例:"
autoFocus
/>
<button onClick={ ... }>追加</button>
</div>
);

新鮮というより懐かしく感じる世代……
属性はキャメルケース
属性やプロパティはキャメルケースで書く。
ハイフンで繋いでいるものは、ハイフンをとって直後の頭文字が大文字になる。
const imgUrl = 'XXX/XXX.jpg';
return (
<div>
<h1>Hello, World!</h1>
<img
src={imgUrl}
alt="画像の説明"
className="photo"
aria-hidden="true"
/>
<input
type="text"
value={inputText}
onChange={ ... }
placeholder="入力例:"
autoFocus
/>
<button onClick={ ... }>追加</button>
</div>
);
なお、CSSをインラインで書く場合も、CSSの書き方はキャメルケースになる。
return (
<div>
<ul style={{
backgroundColor: 'black',
color: 'pink'
}}>
<li>ABC</li>
<li>123</li>
<li>あいう</li>
</ul>
</div>
);
コンポーネントから返すときは要素を一つにまとめる
return () の中の要素は一つにまとまってないといけない。
NG例
return (
<h1>Hello, World!</h1>
<img
src="XXX/XXX.jpg"
alt="画像の説明"
className="photo"
/>
);
OK例
return (
<div>
<h1>Hello, World!</h1>
<img
src="XXX/XXX.jpg"
alt="画像の説明"
className="photo"
/>
</div>
);
// <div>などの余計な要素を入れたくない場合は、<>と</>でもOK
return (
<>
<h1>Hello, World!</h1>
<img
src="XXX/XXX.jpg"
alt="画像の説明"
className="photo"
/>
</>
);
コンポーネントを呼び出すときは頭文字が大文字
上記はあくまでもHTMLマークアップの部分。
Reactでコンポーネントを呼び出す場合は、頭文字が大文字。
return (
<CardItem />
);
JSX属性まとめ
よく出てくる属性(プロパティ)。
HTMLでの書き方 | JSXでの書き方 | 意味 |
---|---|---|
class | className | CSSのclass属性 |
style=”color: red”; | style={{ color: 'red' }} | インラインスタイル(オブジェクト形式) |
onClick onChange | onClick onChange | 例)ボタンをクリックしたとき 例)内容が変わったとき ※補足 |
<label for="id"> | label htmlFor="id"> | ラベルの関連付け |
autofocus | autoFocus | ページ表示時にフォーカス |
tabindex="0” | tabIndex={0} | タブでフォーカスする順番 |
補足
プロパティ名は公式から自作まで色々ある。
公式でサポートされているイベントや関数などはドキュメントを参照。
JSXの属性における “” と {} の違い
=
の右側が ""
(ダブルクォーテーション)か {}
(波カッコ)かで意味が変わる。
書き方 | 説明 | 使用例 |
---|---|---|
"" (ダブルクォート) | 「文字列」としてそのまま渡す | <input type="text" placeholder="名前を入力" /> |
{} (波カッコ) | 「JavaScriptの式として評価した結果」を渡す | <p>{name}</p> <input value={name} /> |
属性の種類 | 書き方 | 例 |
---|---|---|
文字列 | "" | <label htmlFor="name">名前</label> |
数値 | {} | <input maxLength={20} /> |
論理値 | {} | <button disabled={true} /> |
変数 | {} | <p>{userName}</p> |
関数 | {} | <button onClick={handleClick}>Click</button> |
const value = "こんにちは"
<input value="value" /> // 文字列"value"
<input value={value} /> // 変数valueの中身(こんにちは)



文字列以外はとにかく{}
。