拦截路由
拦截路由允许你在当前布局中加载来自应用其他部分的路由。当需要在保持当前上下文的情况下展示路由内容时,这种路由模式非常有用。
例如,当用户点击信息流中的照片时,你可以在模态框中展示该照片并覆盖原信息流。此时 Next.js 会拦截 /photo/123
路由,隐藏实际 URL 并将其覆盖在 /feed
路径上。

但当通过可分享链接直接访问照片或刷新页面时,应当渲染完整的照片页面而非模态框。此时不会触发路由拦截。

约定
拦截路由可通过 (..)
约定来定义,这与相对路径约定 ../
类似,但作用于路由片段。
你可以使用:
(.)
匹配同级片段(..)
匹配上一级片段(..)(..)
匹配上两级片段(...)
匹配从根app
目录开始的片段
例如,通过在 feed
片段内创建 (..)photo
目录,可以拦截来自上一级的 photo
片段。

注意
(..)
约定基于_路由片段_而非文件系统层级。
示例
模态框
拦截路由可与并行路由结合实现模态框,解决以下常见问题:
- 通过 URL 实现模态内容可分享
- 页面刷新时保留上下文而非关闭模态框
- 后退导航时关闭模态框而非返回上一路由
- 前进导航时重新打开模态框
参考以下 UI 模式:用户既可通过客户端导航在相册中打开照片模态框,也可通过分享链接直接访问照片页面:

上例中,由于 @modal
是插槽而非片段,photo
路径只需使用 (..)
匹配器。这意味着尽管文件系统层级相差两级,但路由片段仅高一级。
须知:
- 其他应用场景包括:在顶部导航栏打开登录模态框的同时保留独立
/login
页面,或在侧边栏打开购物车模态框。