javascript - Gatsby 应用程序崩溃并出现错误“无法读取属性”,即使可以在控制台记录属性
问题描述
我正在尝试使用 Gatsby 的无头 CMS 中的图像,但是每当我访问我的“mainImage”时,我都会收到一条错误消息TypeError: Cannot read property '<any value in the image here>' of null
我的 Gatsby blog.js 页面中有以下查询
export const query = graphql`
query BlogPageQuery {
posts: allSanityPost(
limit: 12
sort: { fields: [publishedAt], order: DESC }
) {
edges {
node {
id
publishedAt
mainImage {
alt
asset {
fluid(maxWidth: 1080) {
...GatsbySanityImageFluid
}
}
}
title
_rawExcerpt
slug {
current
}
}
}
}
}
`
其结果被传递给负责生成博客网格的组件,如下所示
{data ? (
<BlogPostPreviewGrid blogPosts={data} />
) : (
<p>Could not get blog data</p>
)
}
BlogPostPreviewGrid 目前仅用于将数据传递给我的 BlogPostPreview 组件,如下所示
const BlogPostPreviewGrid = ({blogPosts}) => {
return (
<div>
{blogPosts.posts.edges.map (({ node }) => (
<BlogPostPreview blogPosts={node} key={node.id}/>
))}
</div>
)
}
我的完整 BlogPostPreview.js 组件看起来像这样
import React from "react"
function previewFunction(props) {
return (
<div>
<h1>{props.blogPosts.title}</h1>
{console.log(props.blogPosts)}
{console.log(props.blogPosts.mainImage)}
</div>
)
}
const BlogPostPreview = props => {
return (
<>
{props ? (
previewFunction(props)
) : (
<p>Failed to get blog data in blogPreview component</p>
)
}
</>
)
}
export default BlogPostPreview
使用 BlogPostPreview.js 中的 console.log 语句,我可以看到我所有的 blogpostdata 和 blogPosts.mainImage 数据。但是,如果我尝试在 mainImage 中调用某些内容,则会收到错误消息。
例子:
如果我尝试跑步
{console.log(props.blogPosts.mainImage.alt)}
请参阅随附的屏幕截图以查看{console.log(props)}
devtools 的 Screensot 结果显示 console.log(props) 的结果
我的目标是能够像这样使用 gatsby Img 组件中的图像:
<Img fixed={props.mainImage.asset.fixed}
alt={props.mainImage.alt}
调用 blogPopsts.title 工作正常,因此运行没有问题并打印预期结果
<h1>{props.blogPosts.title}</h1>
谢谢大家的回复和评论!
编辑:我可以看到针对 mainImage 的 console.logs 的结果,但应用程序仍然崩溃。我还看到“关键”字段为空
解决方案
当您尝试访问的数据的至少一个实例不存在于 cms 中时,这通常是一种情况。我们使用的一种解决方法是在 cms 中创建占位符/虚拟数据。另一个是使用 Gatsby.js 模式自定义设置默认/回退模式(有关更多信息,请参阅他们的文档。)
还要确保您单击了在您使用的任何无头 cms 中发布。例如,当我忘记单击 cms 中的“发布”时,我遇到了这个问题。所以内容处于草稿模式,盖茨比将无法获取数据。
推荐阅读
- django - pydev 使用调试出现错误,如何解决?
- javascript - Angular Highcharts 动态 x 轴不起作用
- sql-server - SQL Server 查询:月份排序
- c++ - CMFCPropertyGridCtrl 更改时如何更改颜色?
- javascript - 在孩子上设置父母 - 循环引用
- javascript - 使用 JSON 和 PHP 形成表单。根据select的值过滤
- dojo - TabContainer 下的 Dojo 放置按钮
- python - Django:允许语言前缀和根 url
- xslt - 根据子节点删除节点
- php - 如何将字符串转换为 JSON 数组?