Ale*_*tie 2 reactjs graphql graphql-js relayjs
我正在尝试使用GraphQL和React Relay构建应用程序.
作为其中的一部分,我使用以下规范创建了一个根查询:
query {
AllServices {
edges {
node {
id
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个名为CreateGithubService的突变 - 效果很好.
以下是Relay变异的片段:
getFatQuery() {
return Relay.QL`
fragment on CreateGithubServicePayload {
createdService
}
`
}
getConfigs() {
return [{
type: "REQUIRED_CHILDREN",
children: [
Relay.QL`
fragment on CreateGithubServicePayload {
createdService {
id
}
}
`
]
}]
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是这不会导致依赖于信息更新的视图.
我的AllServices查询未被重新获取,我无法在Fat Query中指定它.
如何设置我的变异以将元素添加到所有服务查询?
谢谢!
小智 5
REQUIRED_CHILDREN
不会更新本地图表; 它仅用于获取仅在变异更新的成功回调中使用的额外数据.事实上,它甚至没有在源代码之外记录,所以我不确定你是如何决定使用它的......
虽然你没有这么说,但我想你想要将这个新节点(createdService
)添加到AllServices
连接中?如果是这样,您需要告诉Relay您的突变会影响该连接:
目前,Relay基本上假设所有突变都影响节点,而不是任意查询.据我所知,您将无法配置突变来更新非节点根查询.因此,您应该在根处添加一个充当AllServices
连接父节点的节点(通常是对此的约定viewer
).换句话说,让它像这样工作:query { viewer { AllServices { ... } } }
您的变异有效负载应始终返回已更改的所有内容,而不仅仅是新数据.这意味着您需要一种AllServices
从有效负载重新获取连接的方法.将viewer
节点添加到模式后,可以在变异有效负载中返回该节点,并更改胖查询以指定连接已更改,例如:fragment on CreateGithubServicePayload { viewer { AllServices } }
FIELDS_CHANGE
并指定fieldIDs 来配置您的突变{ viewer: this.props.viewer.id }
归档时间: |
|
查看次数: |
825 次 |
最近记录: |