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

时间:2019-08-28 02:51:53

标签: reactjs graphql gatsby graphql-js prismic.io

我正在使用Gatsby的“ gatsby-source-prismic-graphql”插件将Prismic仓库与组件连接,并将博客帖子数据显示为卡片。该查询在GraphiQL中工作正常,但是当我将GraphQL查询实现到组件Gatsby中时,我的查询中无法识别“ Prismic”。

我尝试显示其他数据,例如网站元数据,并且没有问题

这是Git仓库:https://github.com/ENEIV/PrometheusIgnis

gatsby-config.js

// Prismic CMS
    {
      resolve: `gatsby-source-prismic-graphql`,
      options: {
        repositoryName: `prometheus`,
        accessToken: process.env.PRISMIC_KEY,
    },

组件从Prismic查询数据

import React from "react"
import { RichText } from "prismic-reactjs"
import { StaticQuery, graphql } from "gatsby"

const articlesQuery = graphql`
  query {
    prismic {
      allArticless(uid: "prometheus-prismic-testing-1") {
        edges {
          node {
            article_title
          }
        }
      }
    }
  }
`

const Posts = () => (
  // const doc = data.prismic.allArticless.edges.slice(0, 1).pop()
  // if (!doc) return null
  <StaticQuery
    query={articlesQuery}
    render={data => (
      <h1>{RichText.render(data.prismic.edges.node.article_title)}</h1>
    )}
  />
)

export default Posts

2 个答案:

答案 0 :(得分:0)

那是因为您缺少RichText渲染{RichText.render(data.prismic.allArticles.edges.node.article_title)}中的'allArticless'(allArticles,否?)对象。

顺便说一句,我认为您的边上有多个结果数组,不是吗?使用allArticless,您将获得多个页面,因此,如果上述解决方案无效,请尝试映射您的结果

data => { data.prismic.edges.map((article, index) => (
   <h1 key={`articleTitle-${index}}>{RichText.render(article.article_title)}</h1>
)}

答案 1 :(得分:0)

?使用“All...”从 CMS 通过 GraphQL 提取数据与使用查询详细信息的单一名称提取数据之间存在巨大差异。 并且在调用多个数据时,最好使用一个map方法(map函数)来拉取所有需要的数据。

例如:

data => { data.prismic.edges.map((article, index) => (<h1 key={`articleTitle-${index}}>{RichText.render(article.article_title)}</h1>)}

正如洛根刚刚解决的那样。