拦截路由(Intercepting Routes)
拦截路由允许你在当前布局内从应用程序的另一部分加载路由。当你想要显示路由内容而不让用户切换到不同上下文时,这种路由范式很有用。
例如,当点击动态中的照片时,你可以在模态框中显示照片,覆盖动态。在这种情况下,Next.js 拦截 /photo/123
路由,掩盖 URL,并将其覆盖在 /feed
上。


但是,当通过点击可共享 URL 或刷新页面导航到照片时,应该渲染整个照片页面而不是模态框。不应该发生路由拦截。


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


提示:
(..)
约定基于 路由段,而不是文件系统。例如,它不考虑并行路由中的@slot
文件夹。
示例
模态框
拦截路由可以与并行路由一起使用来创建模态框。这允许你解决构建模态框时的常见挑战,例如:
- 使模态框内容可通过 URL 共享。
- 在页面刷新时保持上下文,而不是关闭模态框。
- 在向后导航时关闭模态框,而不是转到上一个路由。
- 在向前导航时重新打开模态框。
考虑以下 UI 模式,用户可以使用客户端导航从画廊 打开照片模态框,或从可共享 URL 直接导航到照片页面:


在上面的示例中,到 photo
段的路径可以使用 (..)
匹配器,因为 @modal
是一个插槽,不是一个段。这意味着 photo
路由只高一个段级别,尽管在文件系统级别高两级。
有关逐步示例,请参阅并行路由文档,或查看我们的图片画廊示例。
提示:
- 其他示例可能包括在顶部导航栏中打开登录模态框,同时也有专门的
/login
页面,或在侧边模态框中打开购物车。