依赖于来自中继查询的数据的中继查询

Posted

技术标签:

【中文标题】依赖于来自中继查询的数据的中继查询【英文标题】:Relay query that that depends on data from a Relay query 【发布时间】:2017-06-25 08:00:46 【问题描述】:

我正在尝试执行依赖于来自另一个中继查询的数据的中继查询

假设它在 /job/jobID 之类的 url 下运行

反应

render() 

  const job = this.props.job

  return(
      <h1>job.name</h1>

      <TasksOutstanding 
        project=job.project 
        from=job.startDate 
        to=job.finishDate />
  ) 

继电器

  fragments: 
    job: () => Relay.QL`
      fragment on Job 
        name
        startDate
        finishDate
        project 
          $TasksOutstanding.getFragment('project')
        
     
    `,

所以我需要将 startDate 和 finishDate 放入片段中,例如$TasksOutstanding.getFragment('project',from, to)

但是这些值(fromto)在初始获取时是未知的(我只有 jobID)

人们如何处理这个问题?一旦我有了 startDate 和 finishDate 值,我是否应该只对已安装的组件执行第二个请求?

【问题讨论】:

【参考方案1】:

您需要使用arguments 创建字段,这是 GraqhQL 功能,您应该能够使用您的架构建模工具来完成。

Relay 的variables 也很有用。他们将解决您在初始获取时不认识他们的问题。

所以用fromto 参数声明project 字段,使用参数查询字段返回项目字段的适当数据。您的容器应如下所示:

initialVariables: 
   from: null,
   to: null
,

fragments: 
   job: () => Relay.QL`
     fragment on Job 
       name
       startDate
       finishDate
       project(from: $from, to: $to) 
         $TasksOutstanding.getFragment('project')
       
     
   `,

然后在应用程序生命周期中,您可以使用setVariables 将变量设置为job.startDatejob.finishDate,并获取正确的project

【讨论】:

好的,谢谢,解决这个问题的方法是使用 setVariables 执行后续请求。这是有道理的,我只是希望有一些方法可以在一个请求中做到这一点。

以上是关于依赖于来自中继查询的数据的中继查询的主要内容,如果未能解决你的问题,请参考以下文章

中继 - 在查询之前设置变量

停止中继:查询渲染器为某些 setStates 重新加载数据

使用中继反应本机 graphql 查询:未收到获取的数据

动态构建中继查询

为具有多个定义的查询更新中继存储

水合没有查询的中继片段