You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS 13中如何用Axios替代Fetch实现标记页面重验证?

在Next.js 13中用Axios实现重验证标记的方案

Next.js 13给原生fetch扩展的next.tags是框架专属的缓存配置,Axios本身不支持直接传入这个参数,但可以通过以下两种方式实现类似的重验证效果:

方法1:手动结合revalidateTag API

当你用Axios获取数据后,在需要触发重验证的场景(比如后台数据更新后),直接调用Next.js的revalidateTag方法标记对应缓存失效:

  1. 正常使用Axios请求数据:
import axios from 'axios';

async function fetchData() {
  const res = await axios.get('https://...');
  return res.data;
}
  1. 在需要触发重验证的位置(比如API路由、服务器动作)调用:
import { revalidateTag } from 'next/cache';

export async function revalidateCollection() {
  await revalidateTag('collection');
}

这种方式适合需要手动触发重验证的场景,虽没法像fetch那样自动关联标记,但能达到同样的缓存失效效果。

方法2:在服务端组件中用Next.js缓存API封装Axios

如果想在请求时就关联标记,可以借助Next.js的unstable_cache实验性API(注意后续版本可能变动),把Axios请求包裹起来并指定缓存标记:

import axios from 'axios';
import { unstable_cache } from 'next/cache';

const fetchWithTag = unstable_cache(
  async () => {
    const res = await axios.get('https://...');
    return res.data;
  },
  ['collection-data'], // 缓存键
  { tags: ['collection'] } // 重验证标记
);

// 在服务端组件中使用
async function CollectionPage() {
  const data = await fetchWithTag();
  return <div>{JSON.stringify(data)}</div>;
}

配置后,当调用revalidateTag('collection')时,这个Axios请求的缓存会自动失效并重新获取数据。


内容的提问来源于stack exchange,提问作者Rakesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:50:55