React Routerで複数のパスで同じコンポーネントを表示する:完全ガイド

2024-04-02

React Routerで同じコンポーネントを複数のパス名で表示する方法

Route コンポーネントの path プロパティに複数のパスを指定する

<Route path={["/home", "/about"]} component={MyComponent} />

このコードは、/home/about の両方のパスで MyComponent コンポーネントを表示します。

Switch コンポーネントと Redirect コンポーネントを使用する

<Switch>
  <Route exact path="/home" component={MyComponent} />
  <Route exact path="/about" component={MyComponent} />
  <Redirect from="/" to="/home" />
</Switch>

useParams フックを使用する

function MyComponent() {
  const { path } = useParams();

  // パス名に基づいて処理を行う

  return (
    <div>
      <h1>{path}</h1>
    </div>
  );
}

<Route path={["/home", "/about"]} component={MyComponent} />

高階コンポーネントを使用する

const withPath = (Component) => {
  const { path } = useParams();

  return (
    <div>
      <h1>{path}</h1>
      <Component />
    </div>
  );
};

const MyComponent = () => {
  // 処理

  return (
    <div>
      // コンポーネントの内容
    </div>
  );
};

<Route path={["/home", "/about"]} component={withPath(MyComponent)} />
  • 複数のパスで同じコンポーネントを表示するだけであれば、Route コンポーネントの path プロパティに複数のパスを指定する方法は最も簡単です。
  • パス名に基づいて処理を行う必要がある場合は、useParams フックを使用する必要があります。
  • コンポーネントを再利用したい場合は、高階コンポーネントを使用する必要があります。
  • この回答は、2024年3月21日時点の情報に基づいています。
  • React Routerは常に更新されていますので、最新の情報を確認するようにしてください。



import React, { useState } from "react";
import { BrowserRouter as Router, Route, Switch, Redirect, useParams } from "react-router-dom";

function MyComponent() {
  const [count, setCount] = useState(0);

  const handleClick = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <h1>カウント: {count}</h1>
      <button onClick={handleClick}>カウントを増やす</button>
    </div>
  );
}

function App() {
  return (
    <Router>
      <Switch>
        {/* 1. `Route` コンポーネントの `path` プロパティに複数のパスを指定する */}
        <Route path={["/home", "/about"]} component={MyComponent} />
        {/* 2. `Switch` コンポーネントと `Redirect` コンポーネントを使用する */}
        <Route exact path="/home" component={MyComponent} />
        <Route exact path="/about" component={MyComponent} />
        <Redirect from="/" to="/home" />
        {/* 3. `useParams` フックを使用する */}
        <Route path="/path/:id" component={PathComponent} />
        {/* 4. 高階コンポーネントを使用する */}
        <Route path="/with-path" component={withPath(MyComponent)} />
      </Switch>
    </Router>
  );
}

function PathComponent() {
  const { id } = useParams();

  return (
    <div>
      <h1>パス名: /path/{id}</h1>
      <p>ID: {id}</p>
    </div>
  );
}

const withPath = (Component) => {
  const { path } = useParams();

  return (
    <div>
      <h1>現在のパス: {path}</h1>
      <Component />
    </div>
  );
};

export default App;

このコードをコピーして、Reactプロジェクトで実行してみてください。




他の方法

render プロパティを使用する

<Route path="/home" render={() => <MyComponent />} />

component プロパティと render プロパティを一緒に使用する

<Route path="/home" component={MyComponent} render={() => <MyComponent />} />

このコードは、/home パスで MyComponent コンポーネントを表示します。component プロパティと render プロパティを一緒に使用すると、コンポーネントに props を渡すことができます。

const withPath = (Component) => {
  return (
    <div>
      <h1>現在のパス: {useParams().path}</h1>
      <Component />
    </div>
  );
};

<Route path="/home" component={withPath(MyComponent)} />
  • シンプルな方法であれば、render プロパティを使用する方法がおすすめです。
  • コンポーネントに props を渡す必要がある場合は、component プロパティと render プロパティを一緒に使用する方法が必要です。

javascript reactjs path


JavaScriptでポップアップブロックを検出する

window. open 関数は、新しいウィンドウまたはタブを開きます。ブラウザがポップアップをブロックしている場合、この関数はエラーを生成します。このエラーを処理して、ポップアップがブロックされているかどうかを判断できます。window...


XMLHttpRequestオブジェクトを使ってフォームデータを送信する方法

Ajax通信でフォームデータを送信したいリアルタイムなデータ更新を実現したいドラッグ&ドロップによるファイルアップロードフォームデザインの自由度を高めたいJavaScriptでフォーム送信のようなPOSTリクエストを行う方法は、主に以下の2つです。...


JavaScriptでキーイベントを操る!keydown/keypress/keyupを使いこなす

キーイベントは、ユーザーがキーボードのキーを押したり離したりしたときに発生するイベントです。これらのイベントは、Web アプリケーションのさまざまな機能を制御するために使用できます。たとえば、キーボードショートカットを実装したり、入力フォームの動作を制御したり、ゲームをプレイしたりするために使用できます。...


Node.jsでフォルダを作成・使用する基本

新しいフォルダを作成するには、fs. mkdir() 関数を使用します。この関数は、作成するフォルダのパスと、オプションでアクセス権を指定する必要があります。上記のコードは、my-new-folder という名前の新しいフォルダを作成します。recursive: true オプションを指定すると、親フォルダが存在しない場合は自動的に作成されます。...


React変数ステートメント (JSX) を使用して HTML を挿入する

React では、JSX を使用して HTML を直接コード内に記述することができます。これは、HTML と JavaScript を組み合わせる強力な方法であり、動的なユーザーインターフェースを作成するのに役立ちます。変数ステートメントJSX では、変数を使用して HTML を動的に挿入することができます。これは、変数に HTML コードを格納し、それを JSX 式内で展開することで実現できます。...