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' }], }
已做修改
- 修改
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> ) }
- 在
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字段,导致前端无法拿到该数据。
修复步骤:
- 打开
pages/index.js,找到indexQuery(或对应的GROQ查询语句) - 在查询的
post字段中添加content字段,示例:
*[_type == "post"] | order(publishedAt desc, _createdAt desc) { title, slug, publishedAt, coverImage, author, excerpt, content // 新增这一行,确保查询content字段 }
- 重启Next.js开发服务,刷新页面即可看到content内容正常渲染
其他排查点(如果上述修复无效):
- 检查Sanity后台的文章是否确实保存了content内容,且字段名称为
content(注意大小写) - 确认
more-stories.js中传递的post对象确实包含content属性,可在more-stories.js中打印console.log(post)验证 - 检查PortableText组件是否正确导入,且配置正常
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

