ブラウザ履歴操作・Linkコンポーネント・カスタムフック…「前のページに戻る」を自在に実現!
Reactjs、Next.jsにおける「前のページに戻る」機能の実装方法
ブラウザの履歴操作を利用する方法
これは最もシンプルで、ブラウザの「戻る」ボタンを押下するのと同様の動作となります。
- Reactjsの場合:
useHistory
フックを使用して、ブラウザ履歴を操作することができます。history.goBack()
メソッドを呼び出すことで、一つ前のページへ遷移できます。
import React from 'react';
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
const handleGoBack = () => {
history.goBack();
};
return (
<div>
<button onClick={handleGoBack}>前のページへ戻る</button>
</div>
);
}
import React from 'react';
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const handleGoBack = () => {
router.back();
};
return (
<div>
<button onClick={handleGoBack}>前のページへ戻る</button>
</div>
);
}
Linkコンポーネントを利用する方法
これは、Link
コンポーネントにas
プロパティとhref
プロパティを設定することで実現できます。
as
プロパティには、表示されるURLパスを設定します。
この方法では、ブラウザ履歴に残らずに前のページへ遷移することができます。
import React from 'react';
import { Link } from 'react-router-dom';
function MyComponent() {
return (
<div>
<Link as="/" href="/previous-page">前のページへ戻る</Link>
</div>
);
}
補足
- 上記以外にも、ライブラリなどを利用して「前のページに戻る」機能を実現する方法があります。
- 特定の条件下でのみ前のページへ戻れるようにしたい場合は、
useEffect
フックなどを利用して制御を行うことができます。
ReactjsとNext.jsにおける「前のページに戻る」機能実装のサンプルコード
ブラウザの履歴操作を利用する方法
import React from 'react';
import { useHistory } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
const handleGoBack = () => {
history.goBack();
};
return (
<div>
<button onClick={handleGoBack}>前のページへ戻る</button>
</div>
);
}
Next.js
import React from 'react';
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const handleGoBack = () => {
router.back();
};
return (
<div>
<button onClick={handleGoBack}>前のページへ戻る</button>
</div>
);
}
Linkコンポーネントを利用する方法
Reactjs
import React from 'react';
import { Link } from 'react-router-dom';
function MyComponent() {
return (
<div>
<Link as="/" href="/previous-page">前のページへ戻る</Link>
</div>
);
}
import React from 'react';
import Link from 'next/link';
function MyComponent() {
return (
<div>
<Link href="/previous-page">前のページへ戻る</Link>
</div>
);
}
- 上記のコードはあくまで一例であり、状況に合わせて適宜カスタマイズする必要があります。
- コンポーネントやファイルパスは、実際のプロジェクトに合わせて変更してください。
Reactjs、Next.jsにおける「前のページに戻る」機能の実装方法:その他の方法
カスタムフックを利用する方法
この方法は、useRef
フックとuseEffect
フックを組み合わせて、前のページの情報と状態を保持し、必要なタイミングで前のページへ遷移を行うというものです。
具体的な実装方法としては、以下のようになります。
import React, { useRef, useEffect } from 'react';
function usePreviousPage() {
const previousPageRef = useRef(null);
useEffect(() => {
previousPageRef.current = window.location.pathname;
}, []);
const goBackToPreviousPage = () => {
const previousPage = previousPageRef.current;
if (previousPage) {
window.history.pushState({}, '', previousPage);
}
};
return goBackToPreviousPage;
}
function MyComponent() {
const goBackToPreviousPage = usePreviousPage();
return (
<div>
<button onClick={goBackToPreviousPage}>前のページへ戻る</button>
</div>
);
}
状態管理ライブラリを利用する方法
ReduxやMobXなどの状態管理ライブラリを利用して、前のページの情報と状態をグローバルに管理し、必要なタイミングで前のページへ遷移を行うという方法もあります。
具体的な実装方法は、使用するライブラリによって異なりますが、一般的には以下の手順で行います。
- 状態管理ライブラリでストアを作成し、前のページの情報と状態を格納するプロパティを定義します。
- 各ページコンポーネントで、ストアから前のページの情報と状態を読み取り、必要な処理を行います。
- 「前のページへ戻る」ボタンなどのイベントハンドラで、ストアのアクションを発行し、前のページの情報と状態を更新します。
- ストア内の状態が更新されたことを検知したコンポーネントで、前のページへ遷移処理を行います。
react-router-history
などのサードパーティライブラリを利用して、「前のページに戻る」機能を簡単に実装する方法もあります。
これらのライブラリは、ブラウザ履歴の操作や、前のページの情報へのアクセスなどの機能を提供しており、上記で紹介した方法よりも簡潔に実装することができます。
これらの方法を状況に合わせて選択することで、より柔軟で効率的な「前のページに戻る」機能を実現することができます。
reactjs next.js