Reactjs React中继将根查询更新为fat查询的一部分

Reactjs React中继将根查询更新为fat查询的一部分,reactjs,graphql,relayjs,graphql-js,Reactjs,Graphql,Relayjs,Graphql Js,我正在尝试使用GraphQL和React-Relay构建一个应用程序 作为其中的一部分,我使用以下规范创建了一个根查询: query { AllServices { edges { node { id } } } } 因此,我创建了一个变种,称为CreateGithubService,效果很好 以下是中继突变的一个片段: getFatQuery() { return Relay.QL` fragment

我正在尝试使用GraphQL和React-Relay构建一个应用程序

作为其中的一部分,我使用以下规范创建了一个根查询:

query {
  AllServices {
    edges {
      node {
        id
      }
    }
  }
}
因此,我创建了一个变种,称为CreateGithubService,效果很好

以下是中继突变的一个片段:

getFatQuery() {
      return Relay.QL`
        fragment on CreateGithubServicePayload {
          createdService
        }
      `
  }

  getConfigs() {
      return [{
          type: "REQUIRED_CHILDREN",
          children: [
              Relay.QL`
                  fragment on CreateGithubServicePayload {
                      createdService {
                          id
                      }
                  }
              `
          ]
      }]
  }
我的问题是,这不会导致依赖信息的视图更新

我的AllServices查询未重新蚀刻,无法在Fat查询中指定它

如何设置我的变体以将元素添加到“所有服务”查询中


谢谢

必需\u子项
不会更新本地图形;它严格用于获取额外的数据,这些数据仅用于突变更新的成功回调。事实上,它在源代码之外甚至没有文档记录,所以我不确定您是如何决定这样使用它的

虽然您没有这样说,但我假设您希望将此新节点(
createdService
)添加到
AllServices
连接中?如果是这样,您需要告诉继电器您的突变会影响该连接:

  • 目前,Relay基本上假设所有突变都会影响节点,而不是任意查询。据我所知,您将无法配置变异来更新非节点根查询。因此,您应该在根目录下添加一个节点,作为
    AllServices
    连接的父节点(通常的惯例是
    viewer
    )。换句话说,让它像这样工作:
    query{viewer{AllServices{…}}}

  • 您的变异负载应该始终返回所有已更改的内容,而不仅仅是新数据。这意味着您需要一种从有效负载重新提取
    AllServices
    连接的方法。将
    viewer
    节点添加到模式后,您可以在变异负载中返回该节点,并更改fat查询以指定连接已更改,例如:CreateGithBubServicePayload上的
    片段{viewer{AllServices}

  • 给定这两个模式更改,然后可以使用
    FIELDS\u CHANGE
    配置您的变体,并指定类似
    {viewer:this.props.viewer.id}