第41章:もしこうなら、これを見せる (1) 😊(三項演算子 ? :)
この章では 「条件によって表示を切り替える」 を、Reactでいちばんよく使う書き方で身につけます✨
それが 三項演算子 条件 ? A : B だよ〜!🧡
1) 今日のゴール 🎯
- ✅ ある条件のときだけ、表示を変えられる
- ✅ JSXの中で「Aを見せる / Bを見せる」をサクッと書ける
- ✅ ついでに読みやすくするコツも覚える
2) 三項演算子ってなに?🤔
「もし条件が true ならA、そうじゃなければB」を 1行で 書けるルールだよ✨
- 形はこれ👇
条件 ? trueのとき : falseのとき
3) イメージ図(分岐)🌿
4) Reactでよくある「困りごと」→ 解決!💡
JSXの中って、基本は「式(expression)」しか書けないの。
だから if (...) { ... } をそのまま JSX の中に書くと崩れがち🥲
そこで登場するのが三項演算子!✨ JSX内で自然に「条件で表示切り替え」できるよ〜😆💕
5) まずは超シンプル例 🌟(true/falseで表示切り替え)
App.tsx をこうしてみてね👇
import { useState } from "react";
export default function App() {
const [isOpen, setIsOpen] = useState(false);
return (
<div style={{ padding: 16 }}>
<button onClick={() => setIsOpen((v) => !v)}>
{isOpen ? "閉じる" : "開く"}
</button>
<div style={{ marginTop: 12 }}>
{isOpen ? <p>中身が表示されました!🎉</p> : <p>まだ閉じてるよ🙈</p>}
</div>
</div>
);
}
ここがポイント📝
isOpen ? <p>表示</p> : <p>非表示</p>みたいに JSXをそのまま2択で書ける✨- ボタンの文字も
? :で切り替えてるよ😊
6) よくあるパターン:ログイン状態で切り替える 🔐✨
「ログインしてるなら “ようこそ”、してないなら “ログインしてね”」みたいなやつ!
type User = {
name: string;
};
export default function App() {
const user: User | null = { name: "Aki" }; // null にしたら未ログイン扱いになるよ👀
return (
<div style={{ padding: 16 }}>
{user ? (
<h2>ようこそ、{user.name}さん!🥳</h2>
) : (
<h2>ログインしてください🙏✨</h2>
)}
</div>
);
}
読みやすくするコツ💖
- JSXが長くなるときは、こうやって 改行してカッコで囲む と超読みやすいよ〜!✨
7) 「三項演算子はJSXの外に逃がしてOK」🏃♀️💨(読みやすさ爆上がり)
JSXがごちゃごちゃしてきたら、先に変数に入れちゃう のがラク😆
import { useState } from "react";
export default function App() {
const [score, setScore] = useState(72);
const message =
score >= 80 ? "合格!おめでとう!🎉" : "あとちょっと!ファイト!🔥";
return (
<div style={{ padding: 16 }}>
<p>点数:{score}</p>
<p>{message}</p>
<button onClick={() => setScore((s) => Math.min(100, s + 5))}>+5</button>
<button onClick={() => setScore((s) => Math.max(0, s - 5))}>-5</button>
</div>
);
}
8) 注意:ネスト(入れ子)しすぎは読みにくい 😵💫
こういう「三項の中に三項」は、できれば避けたい…!
// 😵💫 読みにくい例(避けたい)
const text = isVip ? (isLogin ? "VIPログイン中✨" : "VIPだけど未ログイン🥲") : "一般ユーザー🙂";
じゃあどうする?✅
ifをJSXの外で使って変数を作る- もしくは小さめのコンポーネントに分ける がキレイだよ〜✨
9) ミニ練習(5分)✍️🐣
練習1:購入ボタンを切り替えよう🛒
isSoldOutがtrueなら「売り切れ😭」falseなら「購入する💰」
ヒント👇
{isSoldOut ? <button disabled>...</button> : <button>...</button>}
練習2:入力できたらOK表示✅
nameが空なら「名前を入れてね✍️」- 入ってたら「こんにちは、◯◯さん😊」
ヒント👇
name.trim() が空かどうかで判定するとキレイ✨
10) まとめ 🎀
- 三項演算子は 「条件で表示を2択に分ける」最強の書き方✨
- JSXの中では
ifより? :が使いやすい場面が多い😊 - 長くなったら 改行 or 変数に逃がす と読みやすい💕
次の第42章では、「falseなら何も表示しない」 が得意な && をやるよ〜!😆✨