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

NextJS中PortableText无法接收SanityCMS内容的问题求助

问题:Next.js + Sanity 项目中content字段无法传递到PostPlug组件

项目背景

基于Next.js的cms-sanity示例开发,站点运行正常,Sanity后台有2篇已填写content字段的文章。

  • Sanity中post的content字段schema(studio/schemas/post.js):
{
  name: 'content',
  title: 'Content',
  type: 'array',
  of: [{ type: 'block' }],
}

已做修改

  1. 修改post-plug.js组件,新增content参数和PortableText组件:
export default function PostPlug({
  title,
  coverImage,
  date,
  slug,
  content
}) {
  console.log("Content = " + content)
  return (
    <div>
      <div className="mb-5">
        <CoverImage slug={slug} title={title} image={coverImage} />
      </div>
      <h3 className="mb-3 text-2xl leading-snug">
        {title}
      </h3>
      <div className="mb-4 text-lg">
        <Date dateString={date} />
      </div>
      <div className="mb-4 text-lg">
        <PortableText value={content} />
      </div>
    </div>
  )
}
  1. 在more-stories.js中向PostPlug传递content属性:
<PostPlug
  key={post.slug}
  title={post.title}
  coverImage={post.coverImage}
  date={post.date}
  author={post.author}
  slug={post.slug}
  excerpt={post.excerpt}
  content={post.content}
/>

问题现象

  • coverImage、title、date等字段均能正常显示
  • PortableText组件无内容输出,控制台打印Content = undefined
  • 数据传递流程:pages/index.js通过indexQuery获取allPosts → Landing组件 → MoreStories组件 → PostPlug组件,仅content字段无法传递

环境信息

Operating System:
  Platform: win32
  Arch: x64
  Version: Windows 10 Home
Binaries:
  Node: 18.16.0
  npm: N/A
  Yarn: N/A
  pnpm: N/A
Relevant packages:
  next: 13.3.1
  eslint-config-next: N/A
  react: 18.2.0
  react-dom: 18.2.0

解决方案

核心原因:GROQ查询未包含content字段

在Next.js获取Sanity数据的GROQ查询(pages/index.js中的indexQuery)里,默认没有请求content字段,导致前端无法拿到该数据。

修复步骤:

  1. 打开pages/index.js,找到indexQuery(或对应的GROQ查询语句)
  2. 在查询的post字段中添加content字段,示例:
*[_type == "post"] | order(publishedAt desc, _createdAt desc) {
  title,
  slug,
  publishedAt,
  coverImage,
  author,
  excerpt,
  content // 新增这一行,确保查询content字段
}
  1. 重启Next.js开发服务,刷新页面即可看到content内容正常渲染

其他排查点(如果上述修复无效):

  • 检查Sanity后台的文章是否确实保存了content内容,且字段名称为content(注意大小写)
  • 确认more-stories.js中传递的post对象确实包含content属性,可在more-stories.js中打印console.log(post)验证
  • 检查PortableText组件是否正确导入,且配置正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:05:14