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

Next.js/TypeScript中返回Props的类型及Props为undefined的问题

关于Next.js + Sanity Props undefined的问题解答

1. 如何确定返回Props的类型?

  • TypeScript显式定义:如果使用TypeScript,可直接定义对应的数据接口来约束Props类型,示例:
    interface Pet {
      _id: string;
      _type: "pet";
      name: string;
      // 补充Sanity中pet文档的其他字段
    }
    
    interface PageProps {
      pets: Pet[];
    }
    
    在页面组件和数据获取函数中使用该类型,就能明确Props的结构。
  • 打印数据看实际结构:在fetchData函数内添加console.log(pets),运行后查看控制台输出的pets字段细节,直接确认Props的类型和内容。
  • 对照Sanity Studio文档结构:打开Sanity Studio查看pet类型的文档定义,里面的字段名、字段类型就是Props中pets的对应结构。

2. 为何Props会是undefined?

  • 数据获取函数命名不符合Next.js规则:Next.js仅会自动识别getStaticProps(静态生成场景)或getServerSideProps(服务端渲染场景)这两个固定命名的函数,将返回的props传递给页面组件。你当前使用自定义的fetchData,若未在组件中手动调用并传递数据,组件自然拿不到props,把函数名改成上述两个固定名称即可。
  • Sanity Client配置错误:检查你的Sanity客户端是否正确配置了projectId、dataset、apiVersion等核心参数,配置错误会导致client.fetch返回空值或undefined,进而让props中的pets无数据。可在fetchData中打印pets确认是否有数据返回。
  • 组件未正确接收Props:页面组件需通过参数接收props,示例:
    export default function PetsPage({ pets }) {
      return <div>{pets?.map(pet => <p key={pet._id}>{pet.name}</p>)}</div>
    }
    
    若未声明该参数或获取方式错误,就会拿到undefined。
  • 未处理异步请求错误:fetchData中没有错误捕获逻辑,若Sanity API请求失败,会导致pets为undefined。可添加try/catch排查问题:
    export const getStaticProps = async () => {
      try {
        const pets = await client.fetch(`*[_type == "pet"]`);
        console.log('获取到的宠物数据:', pets);
        return { props: { pets } };
      } catch (err) {
        console.error('数据获取失败:', err);
        return { props: { pets: [] } };
      }
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:08:14