switchステートメントを使用する

2024-04-02

React の render 関数内で if...else ステートメントを使用する

三項演算子を使用する

const element = condition ? <ComponentA /> : <ComponentB />;
return (
  <div>
    {element}
  </div>
);

利点:

  • 簡潔に記述できる
  • 読みやすい
  • ネストが深くなると複雑になり、可読性が低下する

条件分岐用の関数を作成する

const renderComponent = () => {
  if (condition) {
    return <ComponentA />;
  } else {
    return <ComponentB />;
  }
};

return (
  <div>
    {renderComponent()}
  </div>
);
  • コードを分割して整理できる
  • 可読性が高くなる
  • コード量が増える

フラグメントを使用する

return (
  <div>
    {condition && <ComponentA />}
    {!condition && <ComponentB />}
  </div>
);
  • 条件分岐が分かりやすい
  • 複雑な条件分岐には不向き

switch ステートメントを使用する

const element = () => {
  switch (condition) {
    case 'case1':
      return <ComponentA />;
    case 'case2':
      return <ComponentB />;
    default:
      return null;
  }
};

return (
  <div>
    {element()}
  </div>
);
  • 複数の条件分岐をまとめて記述できる



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

  const handleLogin = () => {
    setIsLoggedIn(true);
  };

  const handleLogout = () => {
    setIsLoggedIn(false);
  };

  return (
    <div>
      {isLoggedIn ? (
        <LogoutButton onClick={handleLogout} />
      ) : (
        <LoginButton onClick={handleLogin} />
      )}
    </div>
  );
};

このコードでは、isLoggedIntrue の場合は LogoutButton コンポーネント、false の場合は LoginButton コンポーネントをレンダリングしています。

const element = condition ? <ComponentA /> : <ComponentB />;
return (
  <div>
    {element}
  </div>
);
const renderComponent = () => {
  if (condition) {
    return <ComponentA />;
  } else {
    return <ComponentB />;
  }
};

return (
  <div>
    {renderComponent()}
  </div>
);
return (
  <div>
    {condition && <ComponentA />}
    {!condition && <ComponentB />}
  </div>
);
const element = () => {
  switch (condition) {
    case 'case1':
      return <ComponentA />;
    case 'case2':
      return <ComponentB />;
    default:
      return null;
  }
};

return (
  <div>
    {element()}
  </div>
);

これらのサンプルコードを参考に、状況に合わせて if...else ステートメントを使用してみてください。




React の render 関数内で if...else ステートメントを使用する他の方法

テンプレートリテラルを使用する

const element = `
  ${condition ? `<ComponentA />` : `<ComponentB />`}
`;

return (
  <div>
    {element}
  </div>
);

.map() 関数を使用する

const elements = [<ComponentA />, <ComponentB />];

return (
  <div>
    {elements.map((element, index) => (
      condition ? element : null
    ))}
  </div>
);

カスタムフックを使用する

const useConditionalRender = (condition) => {
  const [element, setElement] = useState(null);

  useEffect(() => {
    setElement(condition ? <ComponentA /> : <ComponentB />);
  }, [condition]);

  return element;
};

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

  const element = useConditionalRender(isLoggedIn);

  return (
    <div>
      {element}
    </div>
  );
};

X


reactjs


Reactコンポーネントの再レンダリング:パフォーマンスを向上させるためのヒント

Reactコンポーネントが再レンダリングされる主な原因は次のとおりです。状態の変化: コンポーネントの状態が変更されると、Reactはコンポーネントを再レンダリングして、新しい状態を反映します。親コンポーネントの再レンダリング: 親コンポーネントが再レンダリングされると、その子コンポーネントもすべて再レンダリングされます。...


React Router v4でparamsをhistory.push/Link/Redirectで渡す方法

history. pushを使用してparamsを渡すには、以下のコードのようにstateオブジェクトを使用します。上記のコードでは、history. pushを使用して/my-pageというパスに遷移します。このとき、stateオブジェクトを使用して、param1とparam2という2つのparamsを渡しています。...


Reactでワンランク上のコードを目指す!create-react-appのindex.cssとApp.cssを使いこなすヒント集

index. css は、アプリケーション全体のグローバルなスタイルを定義するために使用されます。つまり、このファイルで定義されたスタイルは、アプリケーション内のすべてのコンポーネントに適用されます。例えば、フォント、色、余白などの基本的なスタイルを定義するのに適しています。...


TypeScript & Reduxで開発をさらに効率化! Next.jsとCreate React Appの活用術

React. jsは、Webアプリケーション開発で人気のあるJavaScriptライブラリです。しかし、単体のライブラリとしてだけでなく、開発をさらに効率化するためのツールやフレームワークも豊富に存在します。その中でもよく比較されるのが、Create React AppとNext...


create-react-app 4.0.1以降が動作しない問題:原因と解決策

2020年11月下旬頃から、create-react-app 4.0.1以降でプロジェクトを作成しようとすると、以下のエラーが発生するケースが報告されています。原因この問題は、create-react-app 及び react-scripts のバージョン 4.0.0 と TypeScript 4.1.0 以降が組み合わさることで発生するバグが原因でした。現在は修正済みですが、当時は以下の状況で問題が発生していました。...