React Relay更新根查询作为变异脂肪查询的一部分



我正在尝试使用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查询中指定它。

如何设置我的突变以将元素添加到所有服务查询?

谢谢!

REQUIRED_CHILDREN不会更新本地图;它严格用于获取仅在突变更新的成功回调中使用的额外数据。事实上,它甚至没有在源代码之外进行记录,所以我不确定你是如何决定这样使用它的。。。

虽然您没有这么说,但我想您希望将这个新节点(createdService)添加到AllServices连接中?如果是这样,你需要告诉Relay你的突变会影响这种连接:

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

  2. 您的突变有效载荷应该始终返回所有已更改的内容,而不仅仅是新数据。这意味着您需要一种方法来从有效负载中重新获取AllServices连接。一旦将viewer节点添加到架构中,就可以在突变有效载荷中返回该节点,并更改fat查询以指定连接已更改,例如:fragment on CreateGithubServicePayload { viewer { AllServices } }

  3. 给定这两个模式更改,然后可以使用FIELDS_CHANGE配置突变,并指定类似{ viewer: this.props.viewer.id }的字段ID

最新更新