fetch
Next.js 扩展了原生 Web fetch()
API,允许服务端的每个请求设置自己的持久化缓存策略。
在浏览器中,cache
选项表示 fetch 请求如何与 浏览器 的 HTTP 缓存交互。通过此扩展,cache
表示 服务端 fetch 请求如何与框架的持久化 HTTP 缓存交互。
您可以直接在服务端组件 (Server Components) 中使用 async
和 await
调用 fetch
。
fetch(url, options)
由于 Next.js 扩展了 Web fetch()
API,您可以使用所有 原生支持的选项。
options.cache
配置请求如何与 Next.js 数据缓存 (Data Cache) 交互。
force-cache
(默认值) - Next.js 会在其数据缓存中查找匹配的请求。- 如果找到匹配且未过期,则从缓存返回。
- 如果没有匹配或已过期,Next.js 会从远程服务器获取资源并更新缓存。
no-store
- Next.js 每次请求都会直接从远程服务器获取资源,不检查缓存,且不会更新缓存。
须知:
- 如果不提供
cache
选项,Next.js 会默认使用force-cache
,除非使用了 动态函数 (dynamic function) 如cookies()
,此时会默认使用no-store
。no-cache
选项在 Next.js 中的行为与no-store
相同。
options.next.revalidate
设置资源的缓存有效期(单位:秒)。
false
- 无限期缓存资源。语义上等同于revalidate: Infinity
。HTTP 缓存可能会随时间推移淘汰旧资源。0
- 禁止缓存该资源。number
- (单位:秒)指定资源最多缓存n
秒。
须知:
- 如果单个
fetch()
请求设置的revalidate
数值小于路由的 默认revalidate
,整个路由的重新验证间隔会被缩短。- 如果同一路由中相同 URL 的两个 fetch 请求设置了不同的
revalidate
值,会采用较小的值。- 为方便起见,如果设置了
revalidate
数值,无需额外设置cache
选项,因为0
表示cache: 'no-store'
,正数表示cache: 'force-cache'
。- 冲突的选项如
{ revalidate: 0, cache: 'force-cache' }
或{ revalidate: 10, cache: 'no-store' }
会导致错误。
options.next.tags
设置资源的缓存标签 (cache tags)。之后可以使用 revalidateTag
按需重新验证数据。自定义标签的最大长度为 256 字符,最多支持 128 个标签项。
版本历史
版本 | 变更 |
---|---|
v13.0.0 | 引入 fetch 功能。 |