React 入門:条件付きレンダリングの基本

アプリ開発をしていると「ある条件のときだけ表示したい」「ログインしているかどうかで画面を切り替えたい」といった場面が必ず出てきます。React では、条件付きレンダリング(Conditional Rendering) を使って、状況に応じた UI を柔軟に表示できます。

今回は、その基本的な書き方から応用的なパターンまでを紹介します。


条件付きレンダリングとは?

簡単に言うと「if 文のように条件を指定して、表示する要素を切り替える」仕組みです。React では JSX 内で JavaScript の条件分岐を使えるため、いくつかの方法で実現できます。


方法 1: if 文で条件分岐

最もシンプルなのは、関数コンポーネント内で if を使って返す内容を変える方法です。

function Greeting({ isLoggedIn }) {
  if (isLoggedIn) {
    return <h1>ようこそ</h1>;
  } else {
    return <h1>ログインしてください</h1>;
  }
}

<Greeting isLoggedIn={true} /> → 「ようこそ!」
<Greeting isLoggedIn={false} /> → 「ログインしてください」


方法 2: 三項演算子を使う

JSX 内でよく使われるのが三項演算子です。短く書けるので便利です。

function Greeting({ isLoggedIn }) {
  return <h1>{isLoggedIn ? "ようこそ!" : "ログインしてください"}</h1>;
}

方法 3: AND 演算子(&&)を使う

特定の条件で「ある要素だけを表示したい」場合には、&& を使うのが便利です。

function Notification({ hasMessage }) {
  return (
    <div>
      <h1>通知センター</h1>
      {hasMessage && <p>新しいメッセージがあります</p>}
    </div>
  );
}

hasMessagetrue のときだけ <p> が表示されます。


方法 4: 変数に代入してから描画する

条件分岐が複雑になる場合は、JSX の前で変数にコンポーネントを代入してから描画する方法が読みやすいです。

function Greeting({ isLoggedIn }) {
  let content;
  if (isLoggedIn) {
    content = <h1>ようこそ</h1>;
  } else {
    content = <h1>ログインしてください</h1>;
  }

  return <div>{content}</div>;
}

実践例:ログイン状態による切り替え

import { useState } from "react";

function App() {
  const [isLoggedIn, setIsLoggedIn] = useState(false);

  return (
    <div>
      {isLoggedIn ? (
        <div>
          <h1>ようこそ</h1>
          <button onClick={() => setIsLoggedIn(false)}>ログアウト</button>
        </div>
      ) : (
        <div>
          <h1>ログインしてください</h1>
          <button onClick={() => setIsLoggedIn(true)}>ログイン</button>
        </div>
      )}
    </div>
  );
}

ログイン・ログアウトのボタンを押すことで、表示内容が切り替わります。これが条件付きレンダリングの典型的な使い方です。


まとめ

  • if 文:シンプルに条件分岐したいとき
  • 三項演算子:短く書きたいとき
  • &&演算子:特定条件でのみ表示したいとき
  • 変数に代入:複雑な条件分岐を整理したいとき