NextJS按需重新验证功能对next/link组件是否生效?
关于Next.js按需缓存重新验证与next/link的兼容性问题
根据Next.js官方文档,按需缓存重新验证功能在常规<a>标签及页面刷新场景下均可正常工作,但对于使用Link from 'next/link'渲染的<a>标签,该功能的表现需要明确:
这类链接属于客户端导航场景,针对你描述的流程:
- 用户访问首页
- 用户点击进入Post1链接
- 服务器端对Post1执行重新验证
- 用户返回首页
- 用户再次点击进入Post1链接
在默认配置下,用户在步骤5中会显示步骤2加载的旧页面。原因是next/link触发的客户端导航会将页面内容缓存到客户端内存中,默认不会主动重新请求服务器获取最新的已验证页面。
如果希望用户在客户端导航时能获取到最新内容,可以通过以下方式处理:
- Pages Router:使用
router.replace()代替Link组件触发导航,或者在页面组件中结合客户端逻辑主动重新获取数据;若放弃静态生成,也可以改用getServerSideProps确保每次请求都获取最新内容。 - App Router(Next.js 13+):可以在服务器端执行
revalidatePath或revalidateTag后,在客户端组件中调用useRouter()的refresh()方法刷新路由;也可以给Link组件添加revalidate={0}属性,强制该导航不使用缓存。
内容的提问来源于stack exchange,提问作者cbdeveloper
相关产品推荐
相关产品推荐

