withRouter 高階コンポーネントを使って前のページに戻る

2024-04-09

React Routerで前のページに戻る方法と履歴の設定

useNavigate フックは、プログラム的にページ遷移を制御するために使用できます。前のページに戻るには、goBack 関数を使用します。

import { useNavigate } from "react-router-dom";

const MyComponent = () => {
  const navigate = useNavigate();

  const handleBackClick = () => {
    navigate(-1);
  };

  return (
    <div>
      <button onClick={handleBackClick}>前のページへ戻る</button>
    </div>
  );
};

このコードは、handleBackClick 関数が呼び出されるたびに、ブラウザ履歴を1つ戻って前のページを表示します。

<Link> コンポーネントは、別のページへのリンクを作成するために使用できます。to 属性に -1 を指定すると、前のページへのリンクになります。

<Link to="-1">前のページへ戻る</Link>

このコードは、ユーザーがリンクをクリックすると、ブラウザ履歴を1つ戻って前のページを表示します。

history オブジェクトは、ブラウザ履歴を操作するために使用できます。前のページに戻るには、goBack メソッドを使用します。

import { history } from "react-router-dom";

const handleBackClick = () => {
  history.goBack();
};

<button onClick={handleBackClick}>前のページへ戻る</button>

履歴の設定

react-router は、いくつかのオプションを使用して履歴を設定できます。

  • basename: アプリケーションのベース URL を設定します。
  • defaultHistory: 使用する履歴オブジェクトを設定します。
  • getUserConfirmation: ページ遷移前に確認ダイアログを表示するかどうかを設定します。

これらのオプションは、createBrowserRouter 関数または createHashRouter 関数の引数として渡されます。

const router = createBrowserRouter({
  basename: "/my-app",
  defaultHistory: createBrowserHistory(),
  getUserConfirmation: (to, from) => {
    // ページ遷移前に確認ダイアログを表示するかどうかを判断する
  },
});

React Routerで前のページに戻るには、いくつかの方法があります。どの方法を使用するかは、アプリケーションの要件によって異なります。




App.js

import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";

const Home = () => {
  return (
    <div>
      <h1>ホーム</h1>
      <Link to="/about">Aboutへ移動</Link>
    </div>
  );
};

const About = () => {
  return (
    <div>
      <h1>About</h1>
      <button onClick={() => window.history.back()}>前のページへ戻る</button>
    </div>
  );
};

const App = () => {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  );
};

export default App;

index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

ReactDOM.render(<App />, document.getElementById("root"));

このコードを実行すると、ブラウザに2つのページが表示されます。

  • ホームページ
  • Aboutページ

Aboutページで "前のページへ戻る" ボタンをクリックすると、ホームページに戻ります。

上記の3つの方法以外にも、前のページに戻る方法はいくつかあります。

  • <Redirect> コンポーネントを使う
  • withRouter 高階コンポーネントを使う
  • useHistory フックを使う

これらの方法は、より複雑な要件を満たす必要がある場合に使用できます。




React Routerで前のページに戻るためのその他の方法

<Redirect> コンポーネントは、ユーザーを別のページにリダイレクトするために使用できます。前のページに戻るには、to 属性に -1 を指定します。

<Redirect to="-1" />

withRouter 高階コンポーネントは、コンポーネントに history オブジェクトへのアクセスを提供します。前のページに戻るには、history.goBack() メソッドを使用できます。

import { withRouter } from "react-router-dom";

const MyComponent = ({ history }) => {
  const handleBackClick = () => {
    history.goBack();
  };

  return (
    <div>
      <button onClick={handleBackClick}>前のページへ戻る</button>
    </div>
  );
};

const WrappedComponent = withRouter(MyComponent);
import { useHistory } from "react-router-dom";

const MyComponent = () => {
  const history = useHistory();

  const handleBackClick = () => {
    history.goBack();
  };

  return (
    <div>
      <button onClick={handleBackClick}>前のページへ戻る</button>
    </div>
  );
};

補足

  • useHistory フックは、React Router v6 で導入されました。React Router v5 以前を使用している場合は、withRouter 高階コンポーネントを使用する必要があります。

javascript reactjs react-router


JavaScript sqlite ライブラリ比較:sql.js、WebSQL、IndexedDBなど

ブラウザ上で動作する: インストールや設定は不要で、Webブラウザさえあれば動作します。軽量で高速: SQLiteは非常に軽量で高速なデータベースエンジンです。簡単: JavaScript sqlite ライブラリを使うことで、SQLクエリを簡単に実行できます。...


HTML ID の最大長と代替方法: JavaScript、HTML、CSS でのプログラミング解説

実用的な最大長HTML ID の最大長はブラウザによって異なりますが、一般的には 1024 文字 とされています。ただし、これはあくまでも目安であり、すべてのブラウザで確実に動作する保証はありません。問題点ID が長すぎると、以下の問題が発生する可能性があります。...


迷ったらコレ!setTimeoutの操作テクニック集:JavaScriptとjQueryでスマートに解決

このガイドでは、JavaScriptとjQueryの両方における setTimeout のリセット方法について詳しく説明します。JavaScript で setTimeout をリセットするには、以下の 2 つの方法があります。clearTimeout 関数を使用する...


Moment.jsとdate-fnsで実現するJavaScriptからMySQLの日付時刻変換

JavaScript で取得した日付時刻を、MySQLデータベースに格納するために、MySQL の DATETIME 型に変換する必要があります。方法主に以下の2つの方法があります。Date オブジェクトを使うJavaScript の Date オブジェクトを作成します。...


JavaScript、jQuery、CSS を使用して CSS3 トランジションの終了を待機する方法

このチュートリアルを始める前に、以下の知識が必要です。HTMLCSSJavaScriptjQueryCSS トランジションは、要素のプロパティを徐々に変化させるアニメーションを作成するための強力なツールです。トランジションは、duration、timing-function、delay などのプロパティを使用して制御できます。...