GraphQL 查询仅显示原始结果

Posted

技术标签:

【中文标题】GraphQL 查询仅显示原始结果【英文标题】:GraphQL query displays only raw results 【发布时间】:2020-05-20 18:19:14 【问题描述】:

我有一种可以工作的 GraphQL 查询(React、Gatsby、Typescript)。但我只让浏览器显示原始 json 数据(“stringify”是正确可见的,原始 json)。

每当我尝试使用数据绑定时,我都会在浏览器中收到错误消息“TypeError: undefined is not an object (evalating 'ProjectTitles.edges.node')”。但不在控制台中。有什么问题?代码如下:

    import  graphql, useStaticQuery  from "gatsby";
    import React,  Fragment  from "react";

    const ProjectList = () => 
      const ProjectTitles = useStaticQuery(graphql`
        
          allMarkdownRemark(sort:  fields: frontmatter___title ) 
            edges 
              node 
                frontmatter 
                  title
                
              
            
          
        
      `);
      return (
        <Fragment>
          <h2>Project titles</h2>
          <div>ProjectTitles.edges.node.frontmatter.title</div>
          /* <div>ProjectTitles.allMarkdownRemark.edges.node.frontmatter.title</div> */
          /* <div>ProjectTitles</div> */
          <pre>JSON.stringify(ProjectTitles, null, 2)</pre>
        </Fragment>
      );
    ;

    export default ProjectList;

【问题讨论】:

您是否尝试过使用这种方法? gatsbyjs.org/docs/page-query/… 顺便说一句,你不会做ProjectTitles.edges.node.frontmatter.tittle - ProjectTitles.edges 是一个数组,所以取决于你想用哪个项目来显示标题,你必须使用类似ProjectTitles.edges[index].node.frontmatter.title 除了上述注释之外,您还可以在尝试访问任何数组项的子属性之前映射ProjectTitles.edges 数组。 【参考方案1】:

由于边缘很可能是一个数组,您需要访问某个项目或映射整个数组,例如

ProjectTitles.edges.map(node => (
    <div>node.frontmatter.title</div>
))

【讨论】:

以上是关于GraphQL 查询仅显示原始结果的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby 源插件仅显示 GraphQL 中数组中的最后一项

GraphQL 架构文件应包含有效的 GraphQL 自省查询结果

Graphql 查询结果在 UI 中正确返回,但数据在应用程序内显示为“未定义”

GraphQL 查询分析是不是仅指查询?

使用 OkHttp 客户端执行原始 graphQL 查询

用 GraphQL 快速搭建服务端 API