Route Groups、布局和动态路由到底该怎么分工
App Router 系列开篇,讨论目录结构、共享布局和动态详情页之间最容易混淆的边界。
发布于 2026-04-09更新于 2026-04-12约 3 分钟阅读
#App Router#Next.js#教程系列
Tutorial Path
App Router 实战系列
当前位置:01 / 04
不是会用 App Router,而是知道每一层应该承担什么。
App Router 最容易让人困惑的,不是语法,而是职责边界。很多人学完之后知道怎么建 page.tsx 和 layout.tsx,但一到真实项目里还是会纠结:哪些页面应该共享布局,哪些目录只是为了组织文件,动态路由什么时候才值得出现。
Route Groups 解决的是结构分区,不是 URL 设计
(main) 这种 route group 最大的意义,是帮助你在代码层划出主站范围。它不会进入 URL,却能明确告诉你:这里的页面共享同一套导航、页脚和整体节奏。将来再出现后台、活动专题或实验性频道时,你就不会把它们和主站页面搅在一起。
layout 负责共享壳,page 负责具体入口
我的一个判断标准是:如果一组页面之间共享的不只是视觉,而是明确的浏览框架,那就值得用 layout 收敛。比如主站的头部导航和底部信息。相反,如果只是局部区块相似,就不一定要再上一个 layout,普通组件组合往往更合适。
动态路由应该围绕“稳定内容单元”出现
博客详情、项目详情、笔记详情都属于稳定内容单元,所以适合用 [slug]。但有些场景其实不需要动态路由,比如单纯的局部筛选、短生命周期活动页、只是参数化展示的交互页。这些时候如果硬上动态路由,结构反而会变重。
小结
App Router 最值得学的不是文件名,而是结构判断。把 route groups、layout 和动态路由的职责划清楚之后,整个站点的目录会轻很多。下一篇我们继续讲一个同样关键的问题:Server Components 和 Client Components 的边界该怎么定。