Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
生徒
「Reactで複雑な条件付きレンダリングを書くと途中で迷子になるんです…どうやって整理したらいいですか?」
先生
「Reactでは条件が増えてくると、一気に読みづらくなるね。整理するコツを覚えると、すっきりしたコードにできるよ。」
生徒
「やっぱり整理する方法があるんですね。どんな考え方がいいんですか?」
先生
「では、初心者でも使いやすくて覚えやすい整理テクニックを順番に見ていこう!」
1. 複雑な条件は「状態の意味」を言葉にして整理しよう
Reactの条件付きレンダリングが複雑になる理由の多くは、「状態が何を意味しているのか」がわかりにくいまま書いてしまうことです。 例えば、非同期でデータを読み込みながら、同時にエラー処理や空データの判定を行うと、画面に表示する条件が増えて混乱しやすくなります。 初心者ほど「とりあえずif文で全部書く」という形になりがちで、気がつくと入り組んだコードができあがります。
まずは状態を「読み込み中」「成功」「空データ」「エラー」などのように言葉で分けて考え、その意味に名前をつけることで、条件分岐が頭の中で整理されます。 言葉にして整理すると、どの状態でどのUIを出すかが明確になり、コードも読みやすくなります。
2. 条件分岐を1行にまとめず、変数に切り出して整理しよう
初心者がつまずきやすいポイントの一つが、「1つのreturnの中ですべてを処理しようとする」書き方です。 条件が増えると長い式が入り混じり、どの条件がどの表示に対応しているのかが非常に読みにくくなります。 そこで、条件を変数に名前をつけて切り出す方法がとても効果的です。
import React from "react";
function UserStatus({ user, isLoading, error }) {
const isError = Boolean(error);
const isEmpty = !isLoading && !error && !user;
const isSuccess = !isLoading && user;
if (isLoading) return <p>読み込み中です…</p>;
if (isError) return <p>エラーが発生しました</p>;
if (isEmpty) return <p>データがありません</p>;
return <p>{user.name}さん、こんにちは!</p>;
}
export default UserStatus;
このように、状態を名前付きの変数にすることで条件の意味が明確になり、後から読んでも直感的に理解できます。 Reactの条件付きレンダリングが難しく感じるのは、判断材料がコードに埋もれてしまうためです。 名前をつけて取り出すだけで可読性が大きく改善されます。
3. 条件の優先順位を明確にして書く
複雑な条件分岐を扱う際は、「どの状態を最優先で判定すべきか」を決めておくことが大切です。 例えば読み込み中なら他の条件より必ず先に表示すべきですし、エラーが発生したらその画面を見せるのが自然です。 このように優先順位を上から順に書くことで、流れの通りに読めるコードになります。
最優先を上、最後に通常表示を置くことで、ReactのJSXがスッキリして読みやすくなります。
4. JSXを分けて小さな部品にすると読みやすくなる
条件によって大きなUIが切り替わる場合は、JSXを大きな1つのreturnに詰め込まない方が見やすくなります。 表示するUIを小さなコンポーネントとして切り出すことで、Reactの構造が視覚的に整理されます。 例えばエラー時の画面や読み込み画面など、決まったパターンは部品としてまとめると再利用もできて便利です。
function LoadingView() {
return <p>読み込み中です…</p>;
}
function ErrorView() {
return <p>エラーが発生しました</p>;
}
function UserView({ user }) {
return <p>{user.name}さん、ようこそ!</p>;
}
function AppUI({ user, isLoading, error }) {
if (isLoading) return <LoadingView />;
if (error) return <ErrorView />;
if (!user) return <p>ユーザーが見つかりません</p>;
return <UserView user={user} />;
}
コンポーネントに分けると、Reactの強みである「部品化」が生きて、複雑な状態でも整理して書くことができます。 初心者ほど1つのコンポーネントに全て書きがちですが、分割するだけで見通しが大きく改善します。
5. 条件が増え続ける場合は「状態の種類」を再設計しよう
どうしても条件が多すぎる場合は、そもそも状態の整理が必要なケースもあります。 例えば「読み込み中」「成功」「失敗」「未ログイン」「権限不足」「空データ」などが混ざると、状態を個別の変数で持つより「状態を一つの値で管理する」方が整理しやすくなる場合があります。
状態をひとまとめの「モード」という考え方にすると、条件が増えても混乱しにくくなります。
const STATUS = {
LOADING: "loading",
ERROR: "error",
EMPTY: "empty",
SUCCESS: "success",
};
function AppUI({ status, user }) {
switch (status) {
case STATUS.LOADING:
return <p>読み込み中です…</p>;
case STATUS.ERROR:
return <p>エラーが発生しました</p>;
case STATUS.EMPTY:
return <p>データがありません</p>;
case STATUS.SUCCESS:
return <p>{user.name}さん、ようこそ!</p>;
default:
return null;
}
}
こうした「状態を一つにまとめる」考え方を取り入れると、複雑な分岐を自然に分類できて、Reactのビューがクリアになります。 条件付きレンダリングが難しいと感じたときこそ、状態そのものを見直す絶好の機会です。