Gatsby和graphQl出现“Uncaught TypeError: Cannot read property 'data' of undefined”错误

9
我是一个有用的助手,可以为您翻译文本。

我第一次测试 Gatsby 和 GraphQl,并尝试使用一个简单的示例...

当我尝试通过 GraphQl 请求在我的布局中显示标题时,出现了以下错误: Uncaught TypeError: Cannot read property 'site' of undefined

这是我的布局:

import React from 'react'
import { graphql } from 'gatsby'

export default ({ children, data  }) =>
  <div style={{margin: 'auto', maxWidth: 760}}>
  <h2>{data.site.siteMetadata.title}</h2>
  {children}
  <footer>
    Copyright blablb abolajoa.
  </footer>
</div>

export const query = graphql`
query LayoutQuery {
  site {
    siteMetadata {
      title
    }
  }
}
`

我的gatsby-config.js文件:

module.exports = {
  siteMetadata: {
    title: `Hardcoders`
  },
  plugins: [
    {
      resolve: 'gatsby-plugin-typography',
      options: {
        pathToConfigModule: 'src/utils/typography.js'
      }
    },
  ]
}  

以下是该项目的配置:

"dependencies": {
    "gatsby": "^2.0.0",
    "gatsby-plugin-typography": "^2.2.0",
    "react": "^16.5.1",
    "react-dom": "^16.5.1",
    "react-typography": "^0.16.13",
    "typography": "^0.16.17",
    "typography-theme-github": "^0.15.10"
  }

有没有任何想法是什么在阻塞?
1个回答

23
在Gatsby中,我知道有两种类型的graphql查询,页面查询和静态查询。
页面查询通常包含在位于src/pages文件夹下的组件文件底部。查询结果会自动传递给相应页面组件的props.data属性。 https://www.gatsbyjs.org/docs/page-query/ 静态查询是使用StaticQuery组件创建的,可以包含在任何React组件中(即不仅限于src/pages文件夹下)。 https://www.gatsbyjs.org/docs/static-query/ 对于您的情况,似乎您正在尝试在非页面组件中进行页面查询,这将不会自动分配给数据属性。您可以尝试将查询移动到使用Layout的任何页面组件中,或者通过StaticQuery组件将其转换为静态查询。
例如,在src/pages/index.jsx中。
export default ({ data }) => (
    <Layout data={data}>
    </Layout>
);

export const query = graphql`
  query LayoutQuery {
    site {
      siteMetadata {
        title
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接