页面树与动态路由
完整文件清单
pages/[locale]/ 下 22 个文件,按职责分组:
入口与聚合
章节页
详情页
跳转
注意 /[locale]/game 不存在。useLayoutRouteMode 等 hook 的 prefetch 匹配里仍把它当作独立分支,但 pages/[locale]/game 实际没有对应文件——这是 GOTCHAS.md 第 21 条记录的「历史遗留匹配」。
受保护与 feed
getStaticPaths 行为
web/[id].tsx:paths从data/projects(按 locale 切)三组(web / game / early)展平。fallback: false。life/[slug].tsx:paths从data/life展平(gameData / travelData / otherData)。fallback: false。blog/[slug].tsx:paths从blog-index.json拉取 slug 列表(在外部内容仓库配置时)或回退到content/blog/init/的内置文章。fallback: 'blocking'让新增 slug 在被请求时实时生成(ISR)。
路由 loading 覆盖层
useRouteLoadingKind(router) 从「离开的路径」而不是「目标路径」决定 loading 变体:
home/content → blog detail:用右侧默认 overlay,左侧 HUD 仍可见blog detail → blog detail:用 standalone overlay,左侧 HUD 已隐藏
不能改成「按目标路径」判断——会破坏其中一种方向。这是 GOTCHAS.md 第 7 条。
详情见
- Contexts 与 hooks 的完整列表见
hooks-and-contexts - 组件层次见
component-architecture