NextJS

数据请求和缓存

Next.js fetch 缓存、no-store 和 revalidate 的使用方式。

发布于 2026年5月30日0 views

Next.js 的数据请求不只是请求接口,还和页面渲染、缓存、静态生成有关。

解决什么问题

不同数据更新频率不同:

  • 文档内容可能一天变一次。
  • 商品价格可能几分钟变一次。
  • 用户信息可能每次请求都不同。

Next.js 允许你给不同请求设置不同缓存策略。

默认缓存

在 Server Component 里可以直接请求数据:

const res = await fetch("https://api.example.com/posts");

默认情况下,Next.js 可能会缓存请求结果,适合稳定内容。

no-store

如果数据不能缓存,可以使用 no-store

const res = await fetch("https://api.example.com/profile", {
  cache: "no-store",
});

适合:

  • 登录用户数据。
  • 实时数据。
  • 后台管理页面。
  • 每次都要拿最新结果的接口。

revalidate

如果数据可以缓存一段时间,可以使用 revalidate

const res = await fetch("https://api.example.com/posts", {
  next: {
    revalidate: 60,
  },
});

表示缓存最多保留 60 秒。过期后,Next.js 可以重新生成数据。

适合:

  • 内容列表。
  • 博客文章。
  • 商品详情。
  • 不需要每秒实时更新的数据。

常见选择

  • 稳定内容:默认缓存或较长 revalidate
  • 内容站列表:revalidate
  • 登录后用户数据:no-store
  • 后台操作数据:no-store
  • 强交互刷新:客户端请求或数据请求库。

注意事项

  • 不要所有接口都无脑 no-store,否则失去缓存优势。
  • 也不要所有接口都默认缓存,用户数据可能会出错。
  • 缓存策略要按数据类型决定。
  • 写操作后要考虑如何刷新页面或重新获取数据。

总结

Next.js 数据请求的重点是缓存策略。稳定内容可以缓存,用户数据和实时数据不要缓存,能接受延迟更新的数据适合用 revalidate