メインコンテンツまでスキップ

Intercepting Routes

Intercepting routesを使用すると、アプリケーションの別の部分からのルートを現在のレイアウト内で読み込むことができます。このルーティングパラダイムは、ユーザーが別のコンテキストに切り替えることなく、ルートの内容を表示したい場合に便利です。

たとえば、フィード内の写真をクリックすると、フィードをオーバーレイするモーダル内で写真を表示できます。この場合、Next.jsは/photo/123ルートをインターセプトし、URLをマスクして/feed上にオーバーレイします。

Intercepting routes soft navigationIntercepting routes soft navigation

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

Intercepting routes hard navigationIntercepting routes hard navigation

規約

Intercepting routesはセグメントに対する(..)規約を用いて定義できます。これは、../の相対パス規約に似ています。

使用可能なもの:

  • (.) 同じレベルのセグメントにマッチ
  • (..) 一つ上のレベルのセグメントにマッチ
  • (..)(..) 二つ上のレベルのセグメントにマッチ
  • (...) appディレクトリのrootからセグメントにマッチ

たとえば、feedセグメント内でphotoセグメントをインターセプトするには、(..)photoディレクトリを作成します。

Intercepting routes folder structureIntercepting routes folder structure

(..)規約はファイルシステムではなく、ルートセグメントに基づいていることに注意してください。

モーダル

Intercepting RoutesはParallel Routesと組み合わせてモーダルを作成するために使用できます。これにより、モーダルを構築する際の一般的な課題を次のように解決できます:

  • モーダルの内容をURLを通じて共有可能にする
  • ページを更新したときにモーダルが閉じず、コンテキストを保持する
  • 前のルートに戻るのではなく、バックナビゲーションでモーダルを閉じる
  • 前進ナビゲーションでモーダルを再開する

次のようなUIパターンを考えてみてください。ユーザーはクライアントサイドナビゲーションを使用してギャラリーから写真モーダルを開くことができ、または共有可能なURLから直接写真ページにナビゲートできます。

Intercepting routes modal exampleIntercepting routes modal example

上記の例では、@modalはスロットであり、セグメントではないため、photoセグメントへのパスは(..)マッチャーを使用できます。これは、ファイルシステムレベルが二つ上であるにもかかわらず、photoルートはセグメントレベルでは一つ上に過ぎないことを意味します。

詳細な手順はParallel Routesのドキュメントで、または画像ギャラリーの例をご覧ください。

Good to know:

  • 他の例としては、トップナビバーでログインモーダルを開くと同時に専用の/loginページを持ったり、サイドモーダルでショッピングカートを開くことが含まれる可能性があります。