Gatsby 错误无法读取 null 的“固定”属性

Posted

技术标签:

【中文标题】Gatsby 错误无法读取 null 的“固定”属性【英文标题】:Gatsby error Cannot read property 'fixed' of null 【发布时间】:2019-08-27 21:44:51 【问题描述】:

我想在索引页面的菜单部分显示我的产品。我尝试从内容 API 显示文本和图像等内容,但出现此错误:

TypeError:无法读取 null 的“固定”属性 src/components/HomePageComponents/Product.js:6 3 |从“../../utils”导入 样式 4 |从“gatsby-image”导入 Img 5 | 6 |导出默认函数 Product( product ) 7 | const 名称、价格、成分 = 产品 8 |常量 固定 = product.img

这是我的 Product.js

import React from "react"
import styled from "styled-components"
import  styles  from "../../utils"
import Img from "gatsby-image"

export default function Product( product ) 
  const  name, price, ingredients  = product
  const  fixed  = product.img

  return (
    <ProductWrapper>
      <Img fixed=fixed className="img" />
      <div className="text">
        <div className="product-content">
          <h3 className="name">name</h3>
          <h3 className="price">price</h3>
        </div>
        <p className="info">ingredients</p>
      </div>
    </ProductWrapper>
  )


const ProductWrapper = styled.div`
  @media (min-width: 576px) 
    display: grid;
    grid-template-columns: auto 1fr;
    grid-column-gap: 1rem;
  
  .img 
    border-radius: 0.5rem;
  
  .product-content 
    display: flex;
    justify-content: space-between;
    font-size: 1.4rem;
    text-transform: uppercase;
  
  .name 
    color: $styles.colors.mainYellow;
    margin-top: 0.5rem;
  
  .price 
    color: $styles.colors.mainYellow;
    margin-top: 0.5rem;
  
  .info 
    margin-top: 0.5rem;
    word-spacing: 0.2rem;
    text-transform: lowercase;
  
`

这是我的 Menu.js

import React from "react"
import Product from "./Product"
import  StaticQuery, graphql  from "gatsby"
import  Section, Title  from "../../utils"
import styled from "styled-components"
// import  Link  from "gatsby"

export default function Menu() 
  return (
    <Section>
      <Title title="Featured items" message="Little taste" />
      <ProductList>
        <StaticQuery
          query=graphql`
            
              items: allContentfulMenu 
                edges 
                  node 
                    name
                    price
                    id
                    ingredients
                    img 
                      fixed(width: 150, height: 150) 
                        ...GatsbyContentfulFixed_tracedSVG
                      
                    
                  
                
              
            
          `
          render=data => 
            return data.items.edges.map(item => 
              return <Product key=item.node.id product=item.node />
            )
          
        />
      </ProductList>
    </Section>
  )


const ProductList = styled.div`
  margin: 3rem 0;
  display: grid;
  grid-template-columns: 100%;
  grid-row-gap: 3rem;
  @media (min-width: 576px) 
    grid-template-columns: 95%;
  
  @media (min-width: 776px) 
    grid-template-columns: 80%;
    justify-content: center;
  
  @media (min-width: 992px) 
    grid-template-columns: 1fr 1fr;
    grid-gap: 2rem;
  
`

【问题讨论】:

【参考方案1】:

在这种情况下,product 中的属性 img 似乎没有任何 fixed 属性。特别是,img 为 null,您将其视为对象。您可能需要在解构之前检查 img 是否真的是一个对象

【讨论】:

【参考方案2】:

内容字段中似乎没有指定图像。因此fixed 的值是null,这是他们的插件gatsby-source-contentful 所不允许的。

【讨论】:

以上是关于Gatsby 错误无法读取 null 的“固定”属性的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法使用 Gatsby 和 graphQl 读取未定义的属性“数据”

在 gatsby 构建期间无法读取样式化组件的主题属性

“无法读取未定义的属性‘节点’” - Gatsby/GraphQL/Prismic

TypeError:无法读取 Gatsby 中未定义 ....src/pages/index.js 的属性“数据”

Gatsby Wordpress ACF 图像字段返回“null”

gatsby-source-wordpress 插件:我无法将数据从 WP 拉入 Gatsby(连接错误)