zukucode
主にWEB関連の情報を技術メモとして発信しています。

React 条件によって表示を切り替える

Reactでは、JavaScriptの条件式を使って表示する内容を切り替えます。

どの書き方が短いかだけで選ぶと、条件が増えたときに表示の優先順位が分かりにくくなります。読み込み、エラー、データなしのように画面全体が切り替わる状態は早期return、一部分の表示には三項演算子や&&を使い分けます。

if文で早めにreturnする

読み込み中やエラーの場合は、コンポーネントの先頭で表示を返すと分かりやすくなります。

type Props = {
  isLoading: boolean;
  errorMessage?: string;
  userName?: string;
};

export const UserProfile = ({ isLoading, errorMessage, userName }: Props) => {
  if (isLoading) {
    return <p>読み込んでいます。</p>;
  }

  if (errorMessage) {
    return <p role="alert">{errorMessage}</p>;
  }

  if (!userName) {
    return <p>利用者が見つかりません。</p>;
  }

  return <p>こんにちは、{userName}さん。</p>;
};

上から順番に条件を確認し、該当した時点で以降の処理を行いません。

三項演算子で2つから選ぶ

const LoginStatus = ({ loggedIn }: { loggedIn: boolean }) => {
  return <p>{loggedIn ? 'ログイン中' : 'ログアウト中'}</p>;
};

条件 ? 条件がtrueの場合 : falseの場合の順に書きます。

三項演算子を何重にもすると読みにくくなるため、条件が多い場合はif文を使用します。

&&で条件を満たす場合だけ表示する

const Notice = ({ hasNewMessage }: { hasNewMessage: boolean }) => {
  return (
    <div>
      {hasNewMessage && <p>新しいメッセージがあります。</p>}
    </div>
  );
};

左側がtrueの場合だけ、右側の要素を表示します。

数値を&&の左側へ直接書かない

意図しない0が表示される例
{items.length && <p>{items.length}件あります。</p>}

配列が空の場合、式の結果である0が画面に表示されることがあります。比較結果をbooleanにします。

{items.length > 0 && <p>{items.length}件あります。</p>}

読み込み中、エラー、データなし、正常表示の順に整理すると、表示漏れを見つけやすくなります。

単純な2択には三項演算子、一部だけの表示には&&、複数の状態にはif文を使うと読みやすくなります。


関連記事

  • TypeScript i18nextの動的な翻訳キーを抽出対象に含める

    i18nextでステータスに応じた文言を表示する場合、翻訳キーを動的に切り替えることがあります。ただし、実行時に正しく表示できることと、翻訳キーの抽出ツールが使用箇所を検出できることは別です。今回は、...


  • React useStateで入力フォームを作成する

    Reactでテキストボックスに入力した値を使用するには、useStateで値を保持します。今回は名前とメールアドレスを入力し、送信ボタンを押すと入力内容を表示するフォームを作成します。この例では入力値...


  • React useStateで一覧の追加と削除を行う

    Reactで一覧を表示するときは、配列をuseStateへ保存できます。今回は簡単な買い物リストを作り、項目の追加と削除を行います。配列のpushやspliceで既存のstateを直接変更するのではな...


  • React useEffectで無限ループが発生するときに確認すること

    ReactのuseEffectを利用したときに無限ループが発生してしまうことがあります。特に注意したいのが、ESLintのreact-hooks/exhaustive-depsで表示された警告をUpd...


  • React 関数コンポーネントにプロパティを設定する

    React+TypeScriptで作成した関数コンポーネントにプロパティを設定する方法を紹介します。以下は送信ボタンのコンポーネントを作成しています。isSubmittingというプロパティを用意して...


  • React useStateでselectの選択値を取得する

    Reactでプルダウンの選択値を扱うには、selectのvalueとonChangeを使用します。DOMから取得するvalueは、数値の選択肢を表示していても文字列です。選択値をそのまま識別子として扱...


  • React react-router-domの基本的な使い方

    React+TypeScriptのプロジェクトにreact-router-domを導入してSPAのアプリケーションを作成する方法を紹介します。まずはreact-router-domのパッケージをインス...


  • react-router-dom ページごとにファイルを分割する

    react-router-domでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そ...


  • react-router-domでプログラムから画面遷移を行う

    react-router-domでプログラムから画面遷移を行う方法を紹介します。history.psuh(遷移先URL)の形式で実行すると、画面遷移を行えます。historyはreact-router...


  • react-router-dom ログイン認証の仕組みを実装する

    React+react-router-dom+TypeScriptでログイン認証の仕組みを実装する方法を紹介します。以下の仕様で実装します。未ログイン時ログイン時まずはログインページとトップページのル...