コース一覧
Reactで状態・フォーム・リストを扱う
出し分け(三項)

Reactで状態・フォーム・リストを扱う

useState、イベントハンドラ、制御されたinput、フォーム送信とバリデーション、mapによるリスト表示、key、条件レンダリング、空状態を扱う全25レッスンのコースです。入力・絞り込み・ダークモードへ反応する作品ギャラリーを作り、ユーザー操作で変化するUIの基本を身につけます。

1
state(useState)
01. なぜstateが必要か15分
02. useState15分
03. ボタンで更新15分
04. 複数のstate15分
05. オブジェクトのstate15分
06. 配列のstate15分
07. 再レンダリングの仕組み10分
08. つくる - ダークモード切替20分
09. 第4章クイズ15分
2
イベントとフォーム
01. イベントハンドラ15分
02. イベントオブジェクト15分
03. 制御されたinput15分
04. 複数の入力15分
05. フォーム送信15分
06. バリデーション15分
07. つくる - 問い合わせフォーム20分
08. 第5章クイズ15分
3
リストと条件レンダリング
01. mapでリスト描画15分
02. key15分
03. 条件レンダリング(&&)15分
04. 出し分け(三項)15分
05. 空状態15分
06. 絞り込みUI15分
07. つくる - ギャラリーReact版20分
08. 第6章クイズ15分

出し分け(三項)

出し分けは三項演算子

2択のときは三項演算子

前のレッスンの && は「出すか、出さないか」でした。今回は「公開中」か「非公開」か、どちらかを必ず出す2択です。この形は三項演算子で書きます。

JavaScript (JSX)

<span>{work.published ? "公開中" : "非公開"}</span>

条件 ? 真のときの値 : 偽のときの値 で、結果は必ずどちらか1つの値になります。式なので JSX の波かっこにそのまま置けます。

文字だけでなく JSX も返せる

三項演算子が返せるのは文字列だけではありません。JSX を返せば、見た目ごと切り替わります。

JavaScript (JSX)

{work.published ? <a href={work.url}>作品を見る</a> : <p>準備中です</p>}

属性の値にも使える

出し分けたいのが中身ではなく class 名のこともあります。className の中身も式なので、同じ書き方が通ります。

JavaScript (JSX)

<span className={work.published ? "label-public" : "label-private"}> {work.published ? "公開中" : "非公開"} </span>

これで文字と見た目の両方が状態に合わせて変わります。CSS 側で .label-public を緑、.label-private を灰色にしておけば、コンポーネントのほうは何も足さずに色が付きます。

つまずきどころ

三項演算子を入れ子にすると、とたんに読めなくなります。

JavaScript (JSX)

{a ? "A" : b ? "B" : "C"}

2段までなら我慢できますが、3段を超えたら三項演算子をやめる合図です。return の前に普通の if 文で変数を組み立て、JSX では変数を出すほうが読みやすくなります。JSX の中で if が書けないだけで、コンポーネントの本体では自由に if を書けます。

もう1つ、&& と三項演算子の使い分けも覚えておきます。片方のときだけ出すなら &&、どちらかを必ず出すなら三項演算子です。条件 ? <Badge /> : null と書けなくはありませんが、それは && で書くほうが短く読めます。

演習

作品カードに、公開中と非公開のラベルを出し分けて付けます。

ヒント

中身は {work.published ? "公開中" : "非公開"} と書けます

className={work.published ? "label-public" : "label-private"} のように、属性の値にも三項演算子を置けます

App.jsx
プレビュー

できているか

  • 公開中のラベルが2件に出ている
  • 非公開のラベルが出ている
  • label-private に「非公開」と表示されている
  • 3枚目の「写真ギャラリー」が非公開になっている
  • label-public に「公開中」と表示されている
エディタを読み込んでいます