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

如何配置Nuxt仅在静态生成时请求后端 避免客户端重复拉取数据

解决方案

1. 限制fetch仅在静态生成阶段执行

你当前的fetch钩子默认会在静态生成、客户端路由跳转两个阶段都执行,只需要加环境判断,客户端侧直接跳过fetch请求即可,修改pages/body-type/_slug.vue代码:

fetch () {
  // 客户端环境直接返回,不发起后端请求
  if (process.client) return
  return this.$axios.$post('/graphql', {
    query: `
      ...
    `,
    variables: { slug: this.$route.params.slug }
  })
    .then(({ data }) => {
      this.bodyTypes = data.bodyTypes.entities
    })
},
fetchKey (getCounter) {
  return getCounter() + this.$route.params.slug
},

2. 补充payload提取配置(可选)

如果修改后仍未生效,可以在nuxt.config.js的generate配置下显式开启payload提取,确保所有静态页的数据都被打包到对应payload.js中:

export default {
  target: 'static',
  ...
  generate: {
    fallback: '404.html',
    // 新增此行,强制提取所有静态页面的payload数据
    payloadExtraction: true,
    exclude: [
      '/contact',
      '/login',
      '/privacy-policy',
      '/r/search-car-for-review',
      '/r/write-a-review',
      '/sign-up',
      '/terms-and-conditions',
    ]
  }
}

实现逻辑

Nuxt静态生成阶段执行fetch/asyncData拿到的数据,会自动序列化到对应页面的payload.js文件中。客户端路由跳转时,只要不重新触发fetch/asyncData请求,框架会自动读取预加载好的payload.js里的内容赋值到组件实例上,完全不会发起后端请求,符合节省后端资源的需求。

内容的提问来源于stack exchange,提问作者Bobík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:02