Next.js App Router 里我踩过的三个坑
Next.js / 工程实践
从 Pages Router 迁到 App Router 之后,开发体验整体更好了,但有几处心智模型变化很大。记录三个我反复踩过的点,方便自己以后回看。
1. 默认缓存比你想的更「倔」
Server Component 里的 fetch 默认会被缓存。本地改了 API 返回却看不到更新时,先别急着重启——检查是不是命中了 Full Route Cache。
对我这种同时做 output: "export" 的静态站来说,更要分清:构建时能拿到的数据 和 运行时才存在的数据。静态导出场景下,任何依赖请求时态的东西都会直接炸掉。
2. "use client" 不是罪,但要画清边界
一开始我会下意识把整页标成 Client Component。后来改成:交互下沉到叶子组件,数据获取留在 Server。
收益很直接——首屏 JS 变少,hydration 也更稳。导航、主题切换、时间线卡片的 hover,这些才真正需要客户端。
3. 静态路径一定要提前想清楚
generateStaticParams 漏掉某个 locale 或 slug,构建期不会总是报错,但线上会 404。我现在的习惯是:路由参数一旦涉及 i18n,就用 locales.flatMap(...) 显式展开,而不是假设默认值够用。
小结
App Router 值得用,但别把它当「自动变快的魔法」。缓存策略、客户端边界、静态参数——这三块想清楚,迁移成本会低很多。