🦔
redirect と router.push の違い
redirect と router.push の違い
redirect と router.push はどちらも、ブラウザの画面遷移を行うための方法ですが、いくつかの重要な違いがあります。
1. ブラウザ履歴への影響:
-
redirect: ブラウザの履歴に新しいエントリを作成します。つまり、ユーザーが「戻る」ボタンで前の画面に戻ることができます。 -
router.push: ブラウザの履歴に新しいエントリを作成しません。つまり、ユーザーが「戻る」ボタンで前の画面に戻ることができません。
2. コンポーネントの再マウント:
-
redirect: 現在のコンポーネントをアンマウントし、新しいコンポーネントをマウントします。つまり、コンポーネントの状態はリセットされます。 -
router.push: 現在のコンポーネントを再マウントしません。つまり、コンポーネントの状態は保持されます。
3. 使用例:
-
redirect: ログイン後など、ユーザーの状態が変化したときに、新しい画面に遷移させる場合に適しています。 -
router.push: ページ内での画面遷移や、ブラウザ履歴を残したくない場合に適しています。
まとめ:
| 項目 | redirect | router.push |
|---|---|---|
| ブラウザ履歴 | 新しいエントリを作成 | 新しいエントリを作成しない |
| コンポーネントの再マウント | する | しない |
| 使用例 | ユーザーの状態が変化したとき | ページ内での画面遷移など |
補足:
-
router.pushは、非同期処理で実行されることに注意が必要です。 -
router.replaceという別の方法もあります。これはrouter.pushと似ていますが、ブラウザ履歴に新しいエントリを作成せず、現在のエントリを置き換えます。
参考情報:
- React Router v6 ドキュメント -
useNavigate - Next.js ドキュメント -
router.push
Discussion