Next.js中getStaticProps配置revalidate未按预期生效怎么办
问题排查及解决方法
- 重校验触发逻辑认知偏差
Next.js 中revalidate对应的增量静态再生(ISR)并不是后台定时自动更新页面,而是有新请求进入时才会触发时间校验:- 收到页面请求时,先返回当前已缓存的静态页面
- 后台判断距离上次生成页面的时间超过设置的3秒,会静默执行
getStaticProps拉取新数据生成新的静态页面 - 新页面生成完成后,后续的新请求才会返回更新后的内容
所以测试时需要修改接口返回数据后,等待3秒以上,连续刷新2次页面,第二次刷新才能看到更新后的数据。
- 测试环境不符合要求
npm run dev启动的开发模式下,revalidate配置本身不会生效,开发模式每次请求都会全量重新执行getStaticProps,不会走ISR缓存逻辑,测试该功能必须使用npm run build && npm run start启动的生产模式。 - 排除其他影响因素
- 在
getStaticProps中打印接口返回的response.data,确认接口本身没有被缓存,每次请求返回的是最新数据,必要时可以给axios请求增加配置headers: {'Cache-Control': 'no-cache'}禁用请求缓存 - 确认项目使用的是Pages Router,App Router的静态重校验逻辑写法不同,不兼容
getStaticProps的配置
- 在
- 实时更新替代方案
如果需要页面打开后自动定时刷新数据,不需要用户手动刷新触发,可以在组件内增加客户端轮询逻辑,搭配SWR、React Query这类数据请求工具实现客户端定时数据刷新。
内容的提问来源于stack exchange,提问作者Denny Kurniawan
相关产品推荐
相关产品推荐

