用途:Next.js 16+ 的缓存组件(Cache Components)用于启用局部预渲染(PPR),在同一条路由中混合静态、已缓存与动态内容,提升首屏速度与数据新鲜度的平衡。需在 next.config.ts 中设置 cacheComponents: true,该配置取代旧的 experimental.ppr 标志。
主要能力:内容分为三类——静态(同步代码、导入、纯计算,构建期预渲染)、已缓存(异步数据,使用 'use cache' 指令,可按文件、组件或函数级别声明)、动态(运行时数据,包在 Suspense 中流式输出)。缓存生命周期通过 cacheLife() 配置,支持内置配置 'default'、'minutes'、'hours'、'days'、'weeks'、'max',也可内联设置 stale、revalidate、expire。缓存失效使用 cacheTag() 打标签,updateTag() 用于同一请求内立即失效,revalidateTag() 用于后台重新验证(stale-while-revalidate)。缓存键依据构建 ID、函数 ID、可序列化参数与闭包变量自动生成。
使用方式:在异步函数内写 'use cache' 即可缓存,可搭配 cacheLife 与 cacheTag;动态部分用 cookies()、headers() 等运行时 API 并包 Suspense。运行时数据约束:'use cache' 内不能访问 cookies()、headers()、searchParams,需在外部取值后作为参数传入(参数会自动进入缓存键);合规场景可用 'use cache: private' 例外。
适用场景:适合博客、仪表盘等需要静态外壳加动态数据的页面;迁移方面,unstable_cache 已被 'use cache' 取代,旧配置如 experimental.ppr、dynamic、revalidate 有对应替换方式,tag 与 revalidate 分别改用 cacheTag() 与 cacheLife()。
限制:不支持 Edge 运行时,需 Node.js;不支持静态导出,需服务端;use cache 内的非确定性值(Math.random()、Date.now())在构建期只执行一次,请求期随机性需用 next/server 的 connection() 延后到请求时。