VIDEO LESSON
usePathnameの使い方:現在のパスでナビゲーションを切り替えるの解説動画
再生時間 7:34動画を別のタブで開く ↗
動画の字幕・文字起こしを読む
再生中の字幕を濃い黒で表示し、一番上に追従します。字幕の行を選ぶと、その位置から再生できます。
- 0:00こんにちは。
- 0:00今回は、ユースパスネームの使い方です。
- 0:03ブラウザーに表示されているユーアールエルのうち、パスの部分をクライアントコンポーネントの中で読み取る方法を学びます。
- 0:12前回学んだユースサーチパラムスがクエスチョンの後ろの検索条件を読むのに対して、
- 0:17今回はスラッシュから始まるパスそのものが対象です。
- 0:22今いるページが分かれば、ナビゲーションで選択中の項目を目立たせたり、支援技術に現在位置を伝えたりできます。
- 0:30完全一致と前方一致の使い分け、共有レイアウトへの置き方、書き換えルールがある場合の注意が、
- 0:34この回のポイントです。
- 0:38まずは、パスと検索条件の違いを押さえるところから始めます。
- 0:43まず前提です。
- 0:44この記事の例は、ネクストジェイエス十五以降の非同期リクエストエーピーアイに合わせた書き方です。
- 0:50ネクストジェイエス十六では、キャッシュコンポーネンツを有効にしない構成を前提とします。
- 0:56タイプスクリプトは五・二以降で、利用するネクストジェイエスが対応するノードジェイエスを使います。
- 1:02配置先は、アプリ直下にレイアウト・ティーエスエックスを備えたアップルーターのプロジェクトです。
- 1:09ページズルーターとは配置先も実行場所も異なるため、プロジェクトのルーターとバージョンを先に確認してください。
- 1:16ユースパスネームはクライアント側のフックです。
- 1:19戻り値の考え方を整理します。
- 1:21ユースパスネームを引数なしで呼ぶと、スラッシュ・ドックスのような、現在のパスを表す文字列が返ります。
- 1:29大切なのは、クエスチョンマークの後ろにあるクエリ文字列、たとえばクエスチョン、
- 1:35キューイコールリアクトのような検索条件は、ここには含まれないことです。
- 1:41検索条件が必要な場面では、前回学んだユースサーチパラムスなど、別のエーピーアイを使ってください。
- 1:48パスは場所、検索条件は絞り込みや並び順、と役割を分けて考えると、どのフックを使うべきか迷わなくなります。
- 1:56引数はなく、戻り値はパスだけ、というシンプルな形です。
- 2:00たとえば、スラッシュ・パスデモにクエリを付けたユーアールエルを開いても、
- 2:05返ってくるのはスラッシュ・パスデモだけです。
- 2:09この切り分けが、このフックの一番の特徴です。
- 2:13記事のコードの前半です。
- 2:15ファイルは、アプリ、パスデモというフォルダーのページ・ティーエスエックスです。
- 2:20先頭にユースクライアントと書いてクライアントコンポーネントにし、ネクスト・スラッシュ・リンクからリンクを、
- 2:27ネクスト・スラッシュ・ナビゲーションからユースパスネームを読み込みます。
- 2:33パスデモの中でユースパスネームを引数なしで呼び、結果をパスネームという定数に入れます。
- 2:39その値を画面にそのまま表示すると、現在のパスを確認できます。
- 2:44インポート先がネクスト・スラッシュ・ナビゲーションである点と、ユースクライアントが必要な点を確認してください。
- 2:52コードの後半、ナビゲーションの部分です。
- 2:55リンクの行き先はスラッシュ・パスデモで、現在地の判定には、パスネームがスラッシュ・パスデモと完全に一致するかどうかを使います。
- 3:04一致すればアリアカレントにページという値を渡し、一致しなければアンディファインドにして属性自体を付けません。
- 3:12アリアカレントは、見た目の強調だけでは伝わらない現在位置を、スクリーンリーダーなどの支援技術にも知らせるための仕組みです。
- 3:21たとえばクエリ付きで開いても、パス部分だけで判定できるため、選択中の表示がぶれません。
- 3:28色や太字だけに頼らず、意味として現在位置を伝えることが、アクセシビリティの面でも大切です。
- 3:34複数リンクのサイトへ応用するときは、一致の決め方を先に決めます。
- 3:39そのページだけを選択扱いにするなら完全一致、配下のページもまとめて選択扱いにするなら前方一致寄りの判定です。
- 3:48画面のコードにあるイズアンダーは、パスが基準と完全一致するか、基準にスラッシュを付けた文字列で始まる場合に、
- 3:53真を返す小さな関数です。
- 3:58たとえばショップの下にある商品ページでは、ショップのリンクを選択中として表示できます。
- 4:05逆にトップページのような短いパスでは、安易に前方一致を使うと全ページが選択扱いになるため、
- 4:09完全一致が向いています。
- 4:14前方一致の落とし穴です。
- 4:15パスがスラッシュ・ショップで始まるかどうかだけを見ると、スラッシュ・ショッパーという別のページまで、
- 4:20ショップの配下だと誤って判定してしまいます。
- 4:25文字列の始まりが同じでも、区切りがなければ別物です。
- 4:29そこで、完全一致の場合と、スラッシュまで含めた前方一致の場合だけを、配下として扱います。
- 4:35記事の確認課題にもある通り、スラッシュ・ショップ、スラッシュ・ショップ・スラッシュ・アイテム、
- 4:40スラッシュ・ショッパーの三つのケースを用意して確かめてください。
- 4:46末尾スラッシュの有無で完全一致が外れることもあるため、設定も合わせて確認します。
- 4:51置き方の注意です。
- 4:53共有レイアウトは、ページ遷移のたびに作り直されるのではなく、維持される仕組みです。
- 4:59そのため、レイアウト自体の中でユーアールエルを読み続けて、現在位置の表示まで担わせようとしないことが大切です。
- 5:08記事が勧めるのは、現在位置に反応する小さなクライアントコンポーネントを別に作り、
- 5:13それをレイアウトの中に配置する形です。
- 5:18こうすると、共通の枠はサーバー側のまま保ち、パスに反応する部分だけを小さく分離できます。
- 5:25責務が分かれるため、表示の不具合が起きたときにも、原因を切り分けやすくなります。
- 5:31書き換えルールがある構成での注意です。
- 5:34リライツなどで、ブラウザーに表示されるパスと、事前にページを生成したときのパスが異なる場合、
- 5:40最初の画面表示と、ブラウザー側で読み直したパスが一致せず、初期描画にずれが出ることがあります。
- 5:46対策の基本は、パスに影響される表示を小さく分けておくことです。
- 5:50そのうえで必要な場合は、画面が表示されたあと、マウント後に現在位置の表示を更新する形を検討してください。
- 5:57全体をクライアント側に寄せるのではなく、影響範囲を絞ることが、表示のちらつきを抑える近道です。
- 6:03特に、最初に表示されるヘッダーやナビゲーションでずれると目立つため、影響範囲の絞り込みが効いてきます。
- 6:10静的出力と確認課題です。
- 6:12ブラウザーでの処理自体は、静的サイトでも利用できます。
- 6:16ただし、遷移先のページは事前に生成されている必要があり、クライアントでの操作が、
- 6:22サーバー機能や認可の代わりになるわけではありません。
- 6:27確認課題として、末尾スラッシュあり・なしの設定を変えて完全一致の条件が適切か試し、
- 6:35配下を選択扱いにする場合は、ショップ、商品ページ、ショッパーの三ケースで判定を確かめてください。
- 6:42開発サーバーだけでなく、本番用ビルドと公開先でも確認し、ユーアールエルを直接開く場合と、
- 6:48画面内のリンクから移る場合を分けて試しましょう。
- 6:54まとめです。
- 6:54ユースパスネームは、現在のパスをクライアントコンポーネントで読むためのフックで、
- 6:58クエリ文字列は含みません。
- 7:02そのページだけなら完全一致、配下も含めるならスラッシュまで含めた判定を使い、
- 7:06ショッパーのような誤判定を避けてください。
- 7:10現在位置の表示は小さなクライアントコンポーネントに分けて配置し、アリアカレントで支援技術にも伝え、
- 7:16書き換えルールがある構成では初期表示のずれに注意します。
- 7:21紹介した判定の三ケースは、手元で小さく試してから、実際のナビゲーションへ組み込んでください。
- 7:28これでユースパスネームは完了です。
- 7:30お疲れさまでした。
- 7:32次回はユースルーターを学びます。
この動画で学べること
usePathnameで現在のパスを読み、選択中のナビゲーションを表示します。クエリ文字列との違いと、書き換えルールがある場合の注意点を学びます。
解説記事・サンプルコードを読む:usePathnameの使い方:現在のパスでナビゲーションを切り替える →