VIDEO LESSON
useRouterの使い方:App Routerの画面遷移・履歴・refreshの解説動画
再生時間 7:32動画を別のタブで開く ↗
動画の字幕・文字起こしを読む
再生中の字幕を濃い黒で表示し、一番上に追従します。字幕の行を選ぶと、その位置から再生できます。
- 0:00こんにちは。
- 0:00今回は、ユースルーターの使い方です。
- 0:03ボタンが押されたときなど、プログラム側から画面遷移を指示する方法を学びます。
- 0:09これまで学んだユースパラムス、ユースサーチパラムス、ユースパスネームがユーアールエルを読むためのフックだったのに対して、
- 0:16ユースルーターはユーアールエルを動かすためのフックです。
- 0:22履歴を追加するプッシュ、現在の履歴を置き換えるリプレース、前に戻るバック、
- 0:27そしてサーバー表示を取り直すリフレッシュ。
- 0:31この四つの役割の違いが今回のポイントです。
- 0:35リンクとの使い分けも合わせて押さえます。
- 0:38この回では、記事にある四つのボタンの例を読み解きながら、それぞれの操作が履歴にどう残るかを具体的に比べていきます。
- 0:46まず前提です。
- 0:47この記事の例は、ネクストジェイエス十五以降の非同期リクエストエーピーアイに合わせた書き方です。
- 0:54ネクストジェイエス十六では、キャッシュコンポーネンツを有効にしない構成を前提とします。
- 1:00タイプスクリプトは五・二以降で、利用するネクストジェイエスが対応するノードジェイエスを使います。
- 1:06配置先は、アプリ直下にレイアウト・ティーエスエックスを備えたアップルーターのプロジェクトです。
- 1:13ページズルーターとは配置先も実行場所も異なるため、プロジェクトのルーターとバージョンを先に確認してください。
- 1:20ユースルーターはクライアント側で動くフックです。
- 1:23戻り値の考え方を整理します。
- 1:25ネクスト・スラッシュ・ナビゲーションのユースルーターを引数なしで呼ぶと、
- 1:30画面遷移を操作するためのオブジェクトが返ります。
- 1:34中心になる操作は四つです。
- 1:36プッシュは履歴を一つ追加して移動します。
- 1:39リプレースは現在の履歴を置き換えて移動するため、戻る操作で置き換え前の画面には戻りません。
- 1:46バックはブラウザーの履歴を一つ前に戻します。
- 1:50リフレッシュは移動せず、現在のルートのサーバー表示を取り直します。
- 1:55移動するのか、履歴をどう扱うのか、表示だけを更新するのか、という観点で選ぶと迷いません。
- 2:02なお、これらの操作はいずれもブラウザー側で動くため、呼び出す側はクライアントコンポーネントである必要があります。
- 2:10記事のコードの前半です。
- 2:12ファイルは、アプリ、ナビゲーションデモというフォルダーのページ・ティーエスエックスです。
- 2:18先頭にユースクライアントと書いてクライアントコンポーネントにし、ネクスト・スラッシュ・ナビゲーションからユースルーターを読み込みます。
- 2:28ユースルーターを呼んで得たルーターオブジェクトを定数に入れ、ボタンのクリックでメソッドを呼び出します。
- 2:36最初のボタンはプッシュで、行き先にクエリ付きのユーアールエルを渡しています。
- 2:42読み込み先がネクスト・スラッシュ・ルーターではなく、ナビゲーションである点が重要です。
- 2:48コードの後半、残り三つのボタンです。
- 2:51二つ目はリプレースで、クエリのないユーアールエルへ現在の履歴を置き換えて移動し、
- 2:55表示条件を解除する想定です。
- 3:00三つ目はバックで、引数なしで履歴を一つ前に戻します。
- 3:04四つ目はリフレッシュで、移動はせず、現在のルートのサーバー表示を取り直します。
- 3:10プッシュしたあとにバックを押せば元の画面へ戻れますが、リプレースしたあとでは戻り先が変わります。
- 3:18この履歴の違いこそが、プッシュとリプレースを使い分ける理由です。
- 3:23四つのボタンが、そのまま操作の比較になっています。
- 3:27実行結果と使い分けです。
- 3:28詳細ボタンを押すと、ユーアールエルのクエリが変わります。
- 3:32ただしこの例はユーアールエル操作だけを示しているため、本文の内容は同じままです。
- 3:38ユーアールエルと画面を連動させたい場合は、これまでに学んだユースサーチパラムスなどで値を読み、
- 3:42表示を切り替えてください。
- 3:46もう一つ大切なのが、リンクとの役割分担です。
- 3:49通常の画面遷移はリンクコンポーネントを使い、フォーム送信後の移動やボタン操作のように、
- 3:56処理と結び付いた移動のときにルーターを使うと、新しいタブで開くなど、リンクとしての操作性を保ちやすくなります。
- 4:03逆に、行き先が固定された案内リンクまでルーターで実装してしまうと、ブラウザー標準のリンク操作が失われがちです。
- 4:11プッシュとリプレースの違いを、履歴の並びで確かめます。
- 4:15画面エーにいるときにプッシュで画面ビーへ移ると、履歴はエー、ビーの順に積まれ、
- 4:19バックでエーへ戻れます。
- 4:24ここでビーからリプレースで画面シーへ移ると、履歴の中のビーがシーに置き換わるため、
- 4:29バックの行き先はエーになり、ビーには戻りません。
- 4:34一時的な条件付きの画面や、戻す意味のない中間画面ではリプレースを、たどってきた経路を残したい通常の移動ではプッシュを、
- 4:40と使い分けます。
- 4:46この違いは、手元で実際に操作して確かめるのが一番確実です。
- 4:51ページズルーターとの違いです。
- 4:53ページズルーターで使っていたネクスト・スラッシュ・ルーターのユースルーターとは、
- 4:56名前は同じでも別物です。
- 5:00アップルーターではネクスト・スラッシュ・ナビゲーションから読み込みます。
- 5:04さらに、ページズルーター側にあったクエリやパスネームといった値が、同じ形で取得できるわけではありません。
- 5:11アップルーターでは、動的ルートの値はユースパラムス、パスはユースパスネーム、
- 5:16検索条件はユースサーチパラムスと、役割ごとのフックで読みます。
- 5:21ユースルーターは操作専用と割り切ると、設計がぶれません。
- 5:24リフレッシュの注意と、移動先の検証です。
- 5:27リフレッシュは現在のルートのサーバー表示を取り直す操作ですが、サーバー側に保存されたデータキャッシュをすべて破棄する命令ではありません。
- 5:37古い表示が残る問題を、リフレッシュだけで解決しようとしないでください。
- 5:42もう一つは安全面です。
- 5:44未検証の外部入力をそのままプッシュへ渡すと、意図しない危険なユーアールエルへ遷移し得ます。
- 5:50移動先は、許可したパスの一覧と照合するなど、検証してから渡してください。
- 5:55利用者の入力をそのまま行き先にしないことが原則です。
- 5:59たとえば、行き先の候補をあらかじめ一覧に用意しておき、入力がその中に含まれる場合だけプッシュする、
- 6:04といった形が基本です。
- 6:08静的出力と確認課題です。
- 6:10ブラウザーでの処理自体は、静的サイトでも利用できます。
- 6:15ただし、遷移先のページは事前に生成されている必要があり、クライアントでの操作がサーバー機能や認可の代わりになるわけではありません。
- 6:26確認課題として、プッシュしたあとに戻る操作を試し、リプレースしたときとの履歴の違いを、
- 6:31自分の言葉で説明してください。
- 6:36別サイトから直接開いた場合、バックは自サイト内へ戻る保証がない点も確認します。
- 6:42開発サーバーだけでなく、本番用ビルドと公開先でも、直接開く場合とリンクから移る場合を分けて試しましょう。
- 6:51まとめです。
- 6:52ユースルーターは、アップルーターで画面遷移を操作するためのフックで、クライアントコンポーネントの中で、
- 6:57ネクスト・スラッシュ・ナビゲーションから使います。
- 7:03プッシュは履歴を追加し、リプレースは現在の履歴を置き換え、バックは前に戻り、
- 7:07リフレッシュはサーバー表示を取り直します。
- 7:11通常の遷移はリンク、処理と結び付いた移動はルーター、という分担を基本にし、
- 7:15移動先は検証してから渡してください。
- 7:19これでユースルーターは完了です。
- 7:21お疲れさまでした。
- 7:22次回はジェネレートメタデータを学びます。
- 7:25四つの操作の違いは、実際にボタンを押して履歴の動きを確かめてみると、短時間で身に付きます。
この動画で学べること
useRouterでボタンから画面を切り替える方法を解説します。push・replace・back・refreshの役割と、next/routerとの違いを確認します。
解説記事・サンプルコードを読む:useRouterの使い方:App Routerの画面遷移・履歴・refresh →