gpt4 book ai didi

reactjs - React Relay 更新根查询作为突变胖查询的一部分

转载 作者:行者123 更新时间:2023-12-02 18:38:38 25 4
gpt4 key购买 nike

我正在尝试使用 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
}
}
`
]
}]
}

我遇到的问题是,这不会导致依赖信息的 View 更新。

我的 AllServices 查询未重新获取,并且我无法在 Fat 查询中指定它。

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

谢谢!

最佳答案

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

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

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

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

  3. 考虑到这两个架构更改,您可以使用 FIELDS_CHANGE 配置突变,并指定 fieldID,例如 {viewer: this.props.viewer.id }

关于reactjs - React Relay 更新根查询作为突变胖查询的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com