C
React/コンポーネント/Lesson 05

条件付きレンダリング

20分·theory
このチャプター
3/4
JavaScript

条件付きレンダリング

💡 なぜ学ぶ必要があるのか?

🎯 ユーザーの状態に応じて異なる画面を表示できます。
💼 ログイン/ログアウト、エラーメッセージなど、実務でよく使われます。
動的でレスポンシブなウェブサイトを作るための必須技術です。
🏢 실무에서는
実務では、ユーザーがログインしている場合はプロフィールを、ログアウトしている場合はログインボタンを表示します。また、データ読み込み中はローディングスピナーを、エラー発生時はエラーメッセージを条件付きでレンダリングします。

条件付きレンダリング — &&演算子と三項演算子によるダイナミックUI

&&演算子パターン

jsx
{isLoggedIn && <UserProfile />}
// isLoggedInがtrueのときのみレンダリング
// falseなら何もレンダリングされない

三項演算子パターン

jsx
{isLoggedIn ? <UserProfile /> : <LoginButton />}
// trueならUserProfile、falseならLoginButton

注意: &&の落とし穴

jsx
{count && <p>カウント: {count}</p>}
// countが0のとき? → 「0」が画面に表示される!(バグ)
// 解決策: {count > 0 && <p>...</p>}

使い分けの基準

状況使うもの
表示するかしないか&&
AまたはBのどちらか三項演算子
複雑な条件if/else + 変数
💻 ログイン中/未ログイン + ローディングスピナー + エラーメッセージ
import { useState } from 'react';

// ===== ログイン状態に応じた条件付きレンダリング =====
function AuthSection() {
  // 入力: ログインの有無
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  // 処理: 条件に応じて異なるUIを選択

  // ローディング中 → スピナー表示
  if (loading) {
    return <div className="spinner">読み込み中...</div>;
  }

  // エラー → エラーメッセージ表示
  if (error) {
    return <p style={{ color: "red" }}>エラー: {error.message}</p>;
  }

  // 出力: 条件に応じて異なるUIをレンダリング
  return (
    <div>
      {/* 三項演算子: ログインの有無に応じて異なるコンポーネント */}
      {isLoggedIn ? (
        <div>
          <p>ようこそ! 🎉</p>
          <button onClick={() => setIsLoggedIn(false)}>ログアウト</button>
        </div>
      ) : (
        <div>
          <p>ログインが必要です。</p>
          <button onClick={() => setIsLoggedIn(true)}>ログイン</button>
        </div>
      )}

      {/* && 演算子: ログイン時にのみ通知を表示 */}
      {isLoggedIn && <p>新しい通知が3件あります。</p>}
    </div>
  );
}

💡 💡 条件付きレンダリングのヒント

  • &&に注意: {0 && <Comp/>}0がレンダリングされる → {count > 0 && ...}を使用
  • 早期リターン: ローディング/エラーを先に処理するとコードがすっきりする
  • Recordマップ: switchよりオブジェクトマッピングの方がシンプル
  • nullを返す: 何もレンダリングしない場合はnullを返す

この概念はReactコンポーネント開発の核心です。Reactの宣言的UIパラダイムを理解し、propsとstateの違いを明確に区別しましょう。コンポーネントは入力(props)に対して常に同じ出力(JSX)を返す純粋関数のように動作する必要があります。

⚛️ Reactパターン — 条件付きレンダリング

Reactで条件付きレンダリングをどのように使うか、コードと共にステップバイステップで学びましょう。
1 🧩 1. 条件付きレンダリングを使うシナリオ
この機能が必要な状況。
2 💻 2. コードの記述
条件付きレンダリングの基本的な使い方。
3 🎨 3. レンダリング結果
ユーザーが見る画面。
4 💡 4. 実践的なヒント
よくある落とし穴とベストプラクティス。

🚦 条件付きレンダリング

コードを直接編集すると0.7秒後に自動的に反映されます。React 18 + Babelでブラウザ上で即時実行されます。
🖥️ 実行結果 — レンダリングされたReactコンポーネント
✏️ React 코드 수정하기 (클릭해서 열기)
⚛️ React 18 + Babel Standalone — まず結果を確認し、エディタで自由に編集できます。

確認クイズ

`{isLoggedIn && <UserProfile />}`で isLoggedIn = false のとき、何が起こりますか?
💡 && 演算子では、左辺が false の場合、右辺は評価されません。React は false、null、undefined を何もレンダリングしません。ただし、数値の 0 は '0' として出力されるので注意!
先に読むとよい概念: Props
次のおすすめ: リストとkey
条件付きレンダリング - React