无法从 Github 的 GraphQL 渲染嵌套道具

Posted

技术标签:

【中文标题】无法从 Github 的 GraphQL 渲染嵌套道具【英文标题】:unable to render nested props from Github's GraphQL 【发布时间】:2017-05-03 19:23:06 【问题描述】:

我正在尝试获取一些Github's GraphQL data 并使用 React & Relay 显示它。我遇到的两个问题是,relay 似乎正在为响应添加别名(使其难以引用),并且并非所有查询的项目都被传递到我的组件props 中。在下面的代码中,我可以渲染 this.props.relay.variables.name,但在尝试循环 this.props.relay.variables.issues 时会变得未定义

// AppQuery.js
import Relay from 'react-relay'
export default 
  relay : Component => Relay.QL `
    query 
      relay 
        $Component.getFragment('relay')
      
    
  `
;

// AppContainer.js
import Relay from 'react-relay'
import App from './AppComponent'

export default Relay.createContainer(App, 
  initialVariables: 
    owner: "rails",
    name: "rails",
    count: 10
  ,
  fragments: 
    relay: () => Relay.QL `
      fragment on Query 
        repository(owner: $owner, name: $name) 
          name
          owner
          description
          issues(first: 20) 
            edges 
              node 
                title
              
            
          
        
      `
  
);

//AppComponent.js
export default class App extends React.Component 
  render() 
    return (
      <div>
        <h1>this.props.relay.variables.name</h1>
        <ul>
           this.props.relay.variables.issues.edges.map((issue) => 
            return(<li>issue.node.title</li>)
          )
        </ul>
      </div>
    );
  

在响应预览中,我似乎成功获取了指定的数据。

但是,当我在控制台登录 this.props 时,获取的某些属性丢失了。

【问题讨论】:

【参考方案1】:

您必须通过在App 组件中使用this.props.relay.repository 来访问查询响应,而不是访问片段的variables

例如,映射所有问题:

<ul>
   this.props.relay.repository.issues.edges.map((issue) => 
    return(<li>issue.node.title</li>)
  )
</ul>

【讨论】:

这是有道理的,但我仍然收到TypeError: Cannot read property 'issues' of undefined。这可能与我的反应得到别名有关吗? "data":"relay":"_repository41jr1f":我不确定为什么某些属性会发生这种情况。 您是尝试访问 Relay 容器上的数据还是内部组件中的数据?根据您的输出,您似乎尝试在它不属于的 Relay 容器中访问它。查询完成后,Relay 容器将数据作为 props 传递给内部组件。

以上是关于无法从 Github 的 GraphQL 渲染嵌套道具的主要内容,如果未能解决你的问题,请参考以下文章

“graphql-tools”中的嵌套解析器不起作用

嵌套错误:无法确定 getProducts 的 GraphQL 输出类型

为什么无法在graphql中过滤深层嵌套查询?

无法正确渲染项目卡。 Reactjs Gatsbyjs Graphql

GraphQL 无法解析嵌套对象属性

无法使用 graphq-request 表示嵌套对象输入类型的数组