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

Posted

技术标签:

【中文标题】为具有多个定义的查询更新中继存储【英文标题】:Updating relay store for queries with multiple definitions 【发布时间】:2016-11-09 05:21:56 【问题描述】:

通常可以使用以下方法为具有单一定义的查询创建 Relay query 对象:

const relayQuery = Relay.QL `
  query UserRoute($id_0: ID!) 
    user(id:$id_0) 
      id,
      name,
      email
    
  
;

我从通过网络发送的查询字符串中截获了查询字符串。它们通常有多个定义(例如查询、片段、突变、订阅)。我想为该类型的查询创建一个Relay query object。以下代码抛出错误:

Relay transform error "You supplied a GraphQL document named 'network' with 2 definitions, but it must have exactly one definition." in file '/Users/ankitshah/lyearnapp/src/network.js'. Try updating your GraphQL schema if an argument/field/type was recently added.

对于此代码:

const relayQuery = Relay.QL `
  query UserRoute($id_0: ID!) 
    user(id:$id_0) 
      id,
      ...F0
    
  
  fragment F0 on User 
    id,
    name,
    email
  
;

我想要这个,因为我想使用 Relay.Store.getStoreData().updateQueryPayload(queryObject, payload) 函数更新 Relay Store。任何帮助表示赞赏。

【问题讨论】:

你的问题解决了吗, 【参考方案1】:

我遇到了同样的错误。您需要将查询压缩为没有这样的片段:

const relayQuery = Relay.QL `
  query UserRoute($id_0: ID!) 
    user(id:$id_0) 
      id,
      name,
      email
    
  
;

然后它起作用了。

【讨论】:

【参考方案2】:

尝试使用命名空间。例如

user1 :user(id:$id_0) 
  id,
  name,
  email

user2 :user(id:$id_1) 
  id,
  name,
  email

【讨论】:

以上是关于为具有多个定义的查询更新中继存储的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义的属性“getRequest” - 中继

具有多个分组或排序的mysql查询优化

求教oracle存储过程的赋值和更新

在 Swift 中继承具有自己类型和存储属性的数组

无法使用请求结果类型为具有多个返回的查询创建类型化查询

在具有多个连接的 Spring Boot Rest API 中公开自定义查询