攔截路由
攔截路由允許您在目前的版面配置中,載入來自應用程式另一部分的路由。當您想要顯示路由的內容,而使用者無需切換到不同的情境時,這種路由模式非常有用。
例如,當點擊動態消息中的照片時,您可以將照片顯示在彈出視窗中,覆蓋在動態消息之上。在這種情況下,Next.js 攔截了 /photo/123
路由,遮蔽了 URL,並將其覆蓋在 /feed
之上。


但是,當透過點擊可分享的 URL 或重新整理頁面導航到照片時,應該渲染整個照片頁面,而不是彈出視窗。不應發生路由攔截。


慣例
攔截路由可以使用 (..)
慣例來定義,這類似於相對路徑慣例 ../
,但用於區段。
您可以使用
(.)
來比對相同層級的區段(..)
來比對上一層級的區段(..)(..)
來比對上兩層級的區段(...)
來比對來自 根目錄app
的區段
例如,您可以透過建立 (..)photo
目錄,從 feed
區段內攔截 photo
區段。


請注意,
(..)
慣例是基於路由區段,而不是檔案系統。
範例
彈出視窗
攔截路由可以與平行路由一起使用,以建立彈出視窗。這讓您可以解決建置彈出視窗時常見的挑戰,例如
- 使彈出視窗內容可透過 URL 分享。
- 在頁面重新整理時保留情境,而不是關閉彈出視窗。
- 在後退導航時關閉彈出視窗,而不是前往上一個路由。
- 在前進導航時重新開啟彈出視窗.
考慮以下 UI 模式,使用者可以使用用戶端導航從圖庫開啟照片彈出視窗,或直接從可分享的 URL 導航到照片頁面


在上面的範例中,photo
區段的路徑可以使用 (..)
比對器,因為 @modal
是一個插槽,而不是一個區段。這表示 photo
路由僅高一個區段層級,儘管在檔案系統中高兩個層級。
要知道
- 其他範例可能包括在頂部導航欄中開啟登入彈出視窗,同時也有一個專用的
/login
頁面,或在側邊彈出視窗中開啟購物車。
這有幫助嗎?