使用RANGE_ADD类型的客户端突变不包括请求有效负载内的边缘

时间:2016-02-08 20:03:23

标签: relayjs graphql

我正在尝试使用下面描述的客户端变异创建新对象:

import Relay from 'react-relay'

export default class CreateThemeMutation extends Relay.Mutation {

  static fragments = {
    admin: () => Relay.QL`fragment on Admin { id }`,
  };

  getMutation() {
    return Relay.QL`mutation { createTheme }`
  }

  getFatQuery() {
    return Relay.QL`
      fragment on CreateThemePayload {
        admin { themes }
        themeEdge
      }
    `
  }

  getVariables() {
    return {
      name: this.props.name,
    }
  }

  getConfigs() {
    return [{
      type: 'RANGE_ADD',
      parentName: 'admin',
      parentID: this.props.admin.id,
      connectionName: 'themes',
      edgeName: 'themeEdge',
      rangeBehaviors: {
        '': 'append',
      },
    }]
  }

}

根查询字段adminviewer非常相似,所以这应该不是问题。问题是我没有在请求有效负载内找到themeEdge(我认为应该出现)(admin { themes }就是这样):

query: "mutation CreateThemeMutation($input_0:CreateThemeInput!){createTheme(input:$input_0){clientMutationId,...F3}} fragment F0 on Admin{id} fragment F1 on Admin{id,...F0} fragment F2 on Admin{_themes2gcwoM:themes(first:20,query:""){count,pageInfo{hasNextPage,hasPreviousPage,startCursor,endCursor},edges{node{id,name,createdAt},cursor}},id,...F1} fragment F3 on CreateThemePayload{admin{id,...F0,id,...F2}}"
variables: {input_0: {name: "test", clientMutationId: "0"}}

因此,服务器端突变中的outputFields.themeEdge.resolve永远不会被调用,我看到了这样的消息:

Warning: writeRelayUpdatePayload(): Expected response payload to include the newly created edge `themeEdge` and its `node` field. Did you forget to update the `RANGE_ADD` mutation config?

我见过similar issue on github。但是REQUIRED_CHILDREN不是我的情况,因为应用程序已经请求themes连接。我错过了一些明显的东西吗我应该粘贴更多信息吗?感谢。

react-relay version:0.6.1

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并最终通过确保我的等效themeEdge实际上作为我的架构中的边缘存在来解决它。如果您为themeEdge构建grep架构,是否存在对象?

供参考,这是我为您量身定制的边缘定义:

{
      "name":"themeEdge",
      "description":null,
      "args":[],
      "type":{
        "kind":"NON_NULL",
        "name":null,
        "ofType":{
          "kind":"OBJECT",
          "name":"ThemeEdge",
          "ofType":null
        }
      },
      "isDeprecated":false,
      "deprecationReason":null
    }

{
    "kind":"OBJECT",
    "name":"ThemeEdge",
    "description":"An edge in a connection.",
    "fields":[{
      "name":"node",
      "description":"The item at the end of the edge.",
      "args":[],
      "type":{
        "kind":"NON_NULL",
        "name":null,
        "ofType":{
          "kind":"OBJECT",
          "name":"Theme",
          "ofType":null
        }
      },
      "isDeprecated":false,
      "deprecationReason":null
    }

另请注意,您的rangeBehaviors必须完全匹配用于检索父对象的查询。您可以按如下方式指定多个查询,这些查询还显示查询包含多个变量的语法:

{
    type: 'RANGE_ADD',
    parentName: 'admin',
    parentID: this.props.admin.id,
    connectionName: 'themes',
    edgeName: 'themeEdge',
    rangeBehaviors: {
      '': 'append',
      'first(1).id($adminId)': 'append',
    },
  }