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

NextJS对接Sanity获取数据报fetch未定义错误如何解决

NextJS 对接 Sanity 报错 Cannot read properties of undefined (reading 'fetch') 修复方案

错误原因

报错是因为你导入的client实例实际为undefined,核心问题出在client.js配置文件:

  • 你在文件内初始化了Sanity客户端,但没有编写导出client的语句,页面文件中import { client } from '../library/client'拿到的值是undefined,调用.fetch()自然触发类型错误
  • 另外还有两处后续会触发问题的隐藏bug:
    • urlFor方法缺少return返回值,后续生成图片地址时会得到undefined
    • 如果你本地安装的@sanity/client是v3及以上新版本,原有的默认导入sanityClient的写法本身就不兼容,会导致初始化失败

修复代码

直接替换client.js的全部内容即可:

// @sanity/client v3+ 版本用以下导入,v2版本替换为 import sanityClient from '@sanity/client'
import { createClient } from '@sanity/client';
import imageUrlBuilder from '@sanity/image-url';

// 初始化客户端后直接导出
export const client = createClient({
    projectId: 's0331zgs',
    dataset: 'production',
    apiVersion: '2022-07-05',
    useCdn: true,
    token: process.env.NEXT_PUBLIC_SANITY_TOKEN
});

const builder = imageUrlBuilder(client);

export const urlFor = (source)=> {
    // 补全return返回值
    return builder.image(source);
}

如果你用的是v2版本的@sanity/client,把初始化方法从createClient换成sanityClient即可,其余逻辑不变。

验证

改完配置后重启NextJS开发服务,getServerSideProps中就能正常调用client.fetch()拉取Sanity数据,不会再触发该报错。

内容的提问来源于stack exchange,提问作者coding beast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:15