【问题标题】:GraghQL query returning integer instead of objectGraphQL 查询返回整数而不是对象
【发布时间】:2020-07-13 04:12:55
【问题描述】:

我不明白为什么我的查询对我的 Gatsby 项目都不起作用。

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

   const site_info = () => {
     const query = graphql`
       query title {
         allSite {
           edges {
             node {
               siteMetadata {
                  title
               }
             }
           }
         }
       }
     `
     console.log(query)
     return <p>Test</p>
   }

   export default site_info

在控制台中,我期待一个可以在元数据中看到标题的对象,但是,我得到了2641826822

我直接从 GraphiQL 复制了查询,我看到了预期的结果,所以不知道为什么它在这里不起作用。

【问题讨论】:

  • common ... 定义查询并不意味着它在下一行代码中运行/获取数据/可用...基本 react/js 知识

标签: reactjs graphql gatsby


【解决方案1】:

当您在 Gatsby 模式中使用 GraphQL 查询(使用您提供的页面查询)某些数据时,您的数据存储为页面 prop(而不是在查询变量本身中),因此您需要访问给他们props 并遍历对象,直到找到数据。理想的结构数据应如下所示:

const yourPage = ({ data }) => {
  const { title } = data.allSite.edges[0].node.siteMetadata;

  return <Layout>
    <h1>{title}</h1>
  </Layout>;
};

export const yourPageData = graphql`
       query title {
         allSite {
           edges {
             node {
               siteMetadata {
                  title
               }
             }
           }
         }
       }
     `;

export default yourPage;

基本上,在上面的 sn-p 中,我将 data 解构为 prop(而不是做 prop.data),我对 data.allSite.edges[0].node.siteMetadata 做同样的事情以获得 title

在您深入了解 GraphQL 之前,我建议您阅读一些有关 Querying Data in Pages with GraphQL 的文档。

【讨论】:

  • 感谢分享 Gatsby 文档,现在查询如何与对象交互更有意义。但是,如上所示传入道具并不能解决我的问题。数据仍以未定义的形式返回。我是否有可能在 gatsby-config.js 中遗漏了什么?我已经配置了 gatsby-source-filesystem 插件以及 siteMetaData 对象。
  • 查询是否在localhost:8000/___graphql Playground 中工作?
  • 是的,我得到了预期值
猜你喜欢
  • 2020-04-08
  • 2021-12-01
  • 2013-12-01
  • 2020-07-22
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多