React 速習チュートリアル

React 条件付きレンダリング

React では、条件に応じてコンポーネントをレンダリング(Conditional Rendering)することができます。
これにはいくつかの手法が存在します。

1. if 文 (if Statement)

JavaScript の if ステートメントを使用して、どのコンポーネントをレンダリングするかを決定できます。

1.1 使用するコンポーネントの定義

まず、以下の 2 つのコンポーネントを用意します。

function MissedGoal() {
  return <h1>ミス!</h1>;
}

function MadeGoal() {
  return <h1>ゴール!</h1>;
}

1.2 条件分岐コンポーネントの作成

次に、条件に基づいてレンダリングするコンポーネントを選択する別のコンポーネントを作成します。

function Goal(props) {
  const isGoal = props.isGoal;
  if (isGoal) {
    return <MadeGoal/>;
  }
  return <MissedGoal/>;
}

// root 要素にレンダリング(isGoal が false の場合)
createRoot(document.getElementById('root')).render(
  <Goal isGoal={false} />
);

isGoal 属性を true に変更して、結果を確認してみてください。

createRoot(document.getElementById('root')).render(
  <Goal isGoal={true} />
);

2. 論理 AND 演算子 (&&)

React コンポーネントを条件付きでレンダリングするもう一つの方法は、&& 演算子を使用することです。
以下の例では、props.brand プロパティが空でない場合のみ、見出し(h1)がレンダリングされます。

2.1 ショートサーキット評価によるレンダリング

&& の左側が真(true)である場合にのみ、右側がレンダリングされます。

function Car(props) {
  return (
    <>
      {props.brand && <h1>私の車は {props.brand} です!</h1>}
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Car brand="フォード" />
);

props.brand が true と評価される場合、&& の後の式がレンダリングされます。
brand プロパティを空にして試してみましょう。

createRoot(document.getElementById('root')).render(
  <Car />
);

3. 三項演算子 (Ternary Operator)

要素を条件付きでレンダリングするもう一つの方法は、三項演算子を使用することです。
構文:条件 ? 真の場合の処理 : 偽の場合の処理

3.1 ゴールの例を三項演算子で書き換える

isGoaltrue であれば MadeGoal コンポーネントを返し、そうでなければ MissedGoal コンポーネントを返します。

function Goal(props) {
  const isGoal = props.isGoal;
  return (
    <>
      { isGoal ? <MadeGoal/> : <MissedGoal/> }
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Goal isGoal={false} />
);