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

时间:2016-07-07 01:06:59

标签: reactjs offline relayjs

通常可以使用以下命令为单个定义的查询创建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)功能更新中继存储。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

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

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

然后它奏效了。

答案 1 :(得分:0)

尝试使用namedspaces。例如

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

}

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

}