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

Sanity/Next.js:无法通过当前slug获取set_name问题求助

问题排查与解决方案

1. 修正组件接收props的方式

你的组件直接将setData作为参数,但React组件接收的是props对象,需调整为以下两种写法之一:

// 写法1:解构props
const Sets = ({ setData }) => {
  return ( 
    <div> 
      <Header />
      <main className="slug-gallery"> 
        <div className='title'>
          {/* 加兜底逻辑,避免数据为空时渲染报错 */}
          <h2>{setData?.set_name || '暂无名称'}</h2>
        </div>
      </main>
    </div>
  )
}
export default Sets;

// 写法2:通过props对象访问
const Sets = (props) => {
  return ( 
    <div> 
      <Header />
      <main className="slug-gallery"> 
        <div className='title'>
          <h2>{props.setData?.set_name || '暂无名称'}</h2>
        </div>
      </main>
    </div>
  )
}
export default Sets;

2. 明确Sanity查询返回字段

你的查询语句未指定要返回的字段,Sanity默认不会返回所有字段,需在查询中明确包含set_name:

export const getServerSideProps = async (pageContext) => {
  const setSlug = pageContext.query.slug;

  // 显式指定要获取的字段
  const setQuery = `*[_type == 'set' && slug.current == $setSlug][0]{set_name, slug}`;
  const setData = await client.fetch(setQuery, {setSlug})

  return {
    props: {setData}
  }
}

3. 验证slug匹配与数据存在性

在getServerSideProps中打印关键数据,确认匹配逻辑和查询结果:

export const getServerSideProps = async (pageContext) => {
  const setSlug = pageContext.query.slug;
  console.log('当前传入的slug:', setSlug);

  const setQuery = `*[_type == 'set' && slug.current == $setSlug][0]{set_name, slug}`;
  const setData = await client.fetch(setQuery, {setSlug})
  console.log('Sanity查询返回的数据:', setData);

  return {
    props: {setData}
  }
}

同时检查Sanity后台对应的set文档,确认slug.current的值是否和前端传入的setSlug完全一致(注意大小写、空格、特殊字符等细节)。

4. 处理数据为空的边界情况

如果查询未找到对应数据,setData会是undefined,组件中需保留兜底逻辑(如setData?.set_name || '暂无名称'),避免页面渲染报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:10:32