如何将 GraphQL 查询中的数据传递到以编程方式生成的页面上?

Posted

技术标签:

【中文标题】如何将 GraphQL 查询中的数据传递到以编程方式生成的页面上?【英文标题】:How to pass data from a GraphQL query onto a programmatically generated page? 【发布时间】:2019-11-11 13:18:03 【问题描述】:

我是 GraphQL 的初学者,在访问 GraphQL 查询中的数据时遇到问题。我已经能够控制台记录数据,这表明查询正在运行,但是当我尝试访问它时,我收到错误消息“无法读取未定义的属性 'page_name'”

查看我尝试过的变体图片:

https://i.ibb.co/6JS20K5/Graph-QL-1.png
https://i.ibb.co/wMq1V6g/Graph-QL-2.png
https://i.ibb.co/MN5g5Pk/Graph-QL-3.png

当我使用时,我可以在控制台中看到我的数据: console.log(data.allPagesJson.edges)

我的理解是,为了访问我需要的确切数据,我应该使用:

console.log(data.allPagesJson.edges.node.page_name)

但是,现在这给了我错误消息“无法读取未定义的属性 'page_name'”。原因似乎是“节点”未定义,但我不确定为什么......

这是我的页面模板:

import React from "react"
import  graphql  from "gatsby"


export default ( data ) => 
  console.log(data.allPagesJson.edges.node.page_name)
  return (

      <div>
        <h1>Test</h1>
      </div>

  )


export const query = graphql`
query($page_url: String!) 
  allPagesJson(filter:  page_url:  eq: $page_url  ) 
    edges
      node
        page_url
        page_name
      
    
  

`

这是我的页面 gatsby-node.js 文件:

const path = require(`path`)

exports.createPages = ( graphql, actions ) => 
    const  createPage  = actions
    return graphql(`
    
        allPagesJson 
          edges 
            node    
             page_url
            
          
         

      
    `
  ).then(result =>     
      result.data.allPagesJson.edges.forEach(( node ) => 
        createPage(
            path: node.page_url,
            component: path.resolve(`./src/templates/product-pages.js`),
            context: 

                page_url: node.page_url,
      ,
    )
  )
    )
  

【问题讨论】:

edges 是一个数组,因此您需要遍历数组才能访问每个数组项中的属性。 非常感谢您的提示,非常感谢! 【参考方案1】:

我设法解决了。我可以使用以下方式访问数据:

<div>
        data.allPagesJson.edges.map(( node ) => (
            <div key=node.id>

                <h1>node.page_name</h1>


            </div>
          ))


      </div>

【讨论】:

以上是关于如何将 GraphQL 查询中的数据传递到以编程方式生成的页面上?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从反应组件传递到 Apollo graphql 查询?

如何将 Redux Store 中的 Props 传递到 Apollo GraphQL 查询中

如何将 segue 标识符添加到以编程方式进行的模态转换?

如何在graphql中获取响应中的所有字段而不在查询中传递任何字段名称

GraphQL.js Node/Express:如何将对象作为 GraphQL 查询参数传递

如何将变量传递给 GraphQL 查询?