React Relay 将根查询更新为突变脂肪查询的一部分
React Relay update a root query as part of a mutation fat query
我正在尝试使用 GraphQL 和 React Relay 构建应用程序。
作为其中的一部分,我创建了一个具有以下规范的根查询:
query {
AllServices {
edges {
node {
id
}
}
}
}
所以我创建了一个名为 CreateGithubService 的 mutation - 效果很好。
这是中继突变的片段:
getFatQuery() {
return Relay.QL`
fragment on CreateGithubServicePayload {
createdService
}
`
}
getConfigs() {
return [{
type: "REQUIRED_CHILDREN",
children: [
Relay.QL`
fragment on CreateGithubServicePayload {
createdService {
id
}
}
`
]
}]
}
我遇到的问题是,这不会导致依赖信息更新的视图。
我的 AllServices 查询没有重新获取,我无法在胖查询中指定它。
如何设置我的变更以将元素添加到所有服务查询?
谢谢!
REQUIRED_CHILDREN
不会更新本地图;它严格用于获取仅在变异更新的成功回调中使用的额外数据。事实上,它甚至没有在源代码之外记录,所以我不确定你是如何决定像这样使用它的...
虽然您没有这么说,但我假设您希望将这个新节点 (createdService
) 添加到 AllServices
连接中?如果是这样,您需要告诉 Relay 您的突变会影响该连接:
目前,Relay 基本上假定所有突变都会影响节点,而不是任意查询。据我所知,您将无法配置突变来更新非节点根查询。因此,您应该在根节点添加一个节点作为您的 AllServices
连接的父节点(通常约定为 viewer
)。换句话说,让它像这样工作:query { viewer { AllServices { ... } } }
您的变异负载应该始终 return 所有已更改的内容,而不仅仅是新数据。这意味着您需要一种方法来从有效负载中重新获取 AllServices
连接。将 viewer
节点添加到架构后,您可以 return 突变负载中的该节点并更改胖查询以指定连接已更改,例如:fragment on CreateGithubServicePayload { viewer { AllServices } }
- 鉴于这两个模式更改,您可以使用
FIELDS_CHANGE
配置您的突变并指定字段 ID,如 { viewer: this.props.viewer.id }
我正在尝试使用 GraphQL 和 React Relay 构建应用程序。
作为其中的一部分,我创建了一个具有以下规范的根查询:
query {
AllServices {
edges {
node {
id
}
}
}
}
所以我创建了一个名为 CreateGithubService 的 mutation - 效果很好。
这是中继突变的片段:
getFatQuery() {
return Relay.QL`
fragment on CreateGithubServicePayload {
createdService
}
`
}
getConfigs() {
return [{
type: "REQUIRED_CHILDREN",
children: [
Relay.QL`
fragment on CreateGithubServicePayload {
createdService {
id
}
}
`
]
}]
}
我遇到的问题是,这不会导致依赖信息更新的视图。
我的 AllServices 查询没有重新获取,我无法在胖查询中指定它。
如何设置我的变更以将元素添加到所有服务查询?
谢谢!
REQUIRED_CHILDREN
不会更新本地图;它严格用于获取仅在变异更新的成功回调中使用的额外数据。事实上,它甚至没有在源代码之外记录,所以我不确定你是如何决定像这样使用它的...
虽然您没有这么说,但我假设您希望将这个新节点 (createdService
) 添加到 AllServices
连接中?如果是这样,您需要告诉 Relay 您的突变会影响该连接:
目前,Relay 基本上假定所有突变都会影响节点,而不是任意查询。据我所知,您将无法配置突变来更新非节点根查询。因此,您应该在根节点添加一个节点作为您的
AllServices
连接的父节点(通常约定为viewer
)。换句话说,让它像这样工作:query { viewer { AllServices { ... } } }
您的变异负载应该始终 return 所有已更改的内容,而不仅仅是新数据。这意味着您需要一种方法来从有效负载中重新获取
AllServices
连接。将viewer
节点添加到架构后,您可以 return 突变负载中的该节点并更改胖查询以指定连接已更改,例如:fragment on CreateGithubServicePayload { viewer { AllServices } }
- 鉴于这两个模式更改,您可以使用
FIELDS_CHANGE
配置您的突变并指定字段 ID,如{ viewer: this.props.viewer.id }