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

Next.js 14数据缓存失效求助:请求始终从源端拉取数据

Next.js 14 fetch缓存未生效的原因分析

针对你给出的代码,缓存不生效的可能原因如下:

  • 函数定义存在语法错误
    你的函数参数写法完全错误:async(/shopby/category/Snacks%20&%20Candy) => { 这种写法会导致函数无法正确接收参数,且内部使用的url变量未定义。实际运行时要么抛出错误,要么请求路径异常,Next.js无法生成有效的缓存键。正确写法应该是在函数内定义请求URL,或者将URL作为参数传入:

    const fetchFromBackEnd = async () => {
      const url = "/shopby/category/Snacks%20%26%20Candy"; // 修正转义符
      const options = {
        method: "GET",
        headers: { accept: "application/json" },
        next: { revalidate: 60 * 60 * 24 }
      };
      const response = await fetch(url, options);
      return response.json();
    };
    
  • URL转义字符错误
    原路径中的%20&是双重转义,正确的&URL编码应为%26,或者直接写&让fetch自动处理转义。错误的URL会导致每次请求的缓存键不匹配,无法命中缓存。

  • 函数调用环境不符合缓存规则
    Next.js的next.revalidate缓存配置仅在Server Components、Server Actions、Route Handlers中生效。如果这个函数是在Client Components里调用的,缓存配置会被忽略,fetch会走浏览器默认缓存逻辑,而非Next.js服务器端缓存。

  • 开发模式默认跳过缓存
    在npm run dev的开发模式下,Next.js为了调试便利,会默认跳过fetch缓存,每次都重新请求数据源。只有在生产模式(执行npm run build && npm start)下,缓存规则才会正常生效。

  • 请求参数或头信息动态变化
    如果每次调用函数时,请求URL带有动态变化的参数,或者请求头包含用户特定的内容(如Cookie),Next.js会生成不同的缓存键,导致无法复用之前的缓存。检查请求的URL和头信息是否每次都保持一致。

内容的提问来源于stack exchange,提问作者Ons Jannet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:26