Intercepting Routes
Intercepting routesを使用すると、アプリケーションの別の部分からのルートを現在のレイアウト内で読み込むことができます。このルーティングパラダイムは、ユーザーが別のコンテキストに切り替えることなく、ルートの内容を表示したい場合に便利です。
たとえば、フィード内の写真をクリックすると、フィードをオーバーレイするモーダル内で写真を表示できます。この場合、Next.jsは/photo/123
ルートをインターセプトし、URLをマスクして/feed
上にオーバーレイします。


しかし、共有可能なURLをクリックしたり、ページを更新したりして写真に移動する場合、モーダルの代わりに写真ページ全体をレンダリングする必要があります。この際はルートのインターセプトが発生しないようにします。


規約
Intercepting routesはセグメントに対する(..)
規約を用いて定義できます。これは、../
の相対パス規約に似ています。
使用可能なもの:
(.)
同じレベルのセグメントにマッチ(..)
一つ上のレベルのセグメントにマッチ(..)(..)
二つ上のレベルのセグメントにマッチ(...)
app
ディレクトリのrootからセグメントにマッチ
たとえば、feed
セグメント内でphoto
セグメントをインターセプトするには、(..)photo
ディレクトリを作成します。


(..)
規約はファイルシステムではなく、ルートセグメントに基づいていることに注意してください。
例
モーダル
Intercepting RoutesはParallel Routesと組み合わせてモーダルを作成するために使用できます。これにより、モーダルを構築する際の一般的な課題を次のように解決できます:
- モーダルの内容をURLを通じて共有可能にする
- ページを更新したときにモーダルが閉じず、コンテキストを保持する
- 前のルートに戻るのではなく、バックナビゲーションでモーダルを閉じる
- 前進ナビゲーションでモーダルを再開する
次のようなUIパターンを考えてみてください。ユーザーはクライアントサイドナビゲーションを使用してギャラリーから写真モーダルを開くことができ、または共有可能なURLから直接写真ページにナビゲートできます。


上記の例では、@modal
はスロットであり、セグメントではないため、photo
セグメントへのパスは(..)
マッチャーを使用できます。これは、ファイルシステムレベルが二つ上であるにもかかわらず、photo
ルートはセグメントレベルでは一つ上に過ぎないことを意味します。
詳細な手順はParallel Routesのドキュメントで、または画像ギャラリーの例をご覧ください。
Good to know:
- 他の例としては、トップナビバーでログインモーダルを開くと同時に専用の
/login
ページを持ったり、サイドモーダルでショッピングカートを開くことが含まれる可能性があります。