【问题标题】:Updating multiple nodes from a React Relay Mutation从 React Relay Mutation 更新多个节点
【发布时间】:2016-04-28 15:44:56
【问题描述】:

假设我有一个具有 PeopleParties 的 GraphQL 模型。

类似这样的:

Person {
   name: String
   parties: PartyConnection
}

Party {
   place: String
   dateTime: String
   people: PeopleConnection
}

我可以查看Person 并查看他们要去的Parties,然后由 Relay 缓存。

我也可以做一个突变来创建一个新的派对,添加一些人。如何确保我添加到聚会中的每个人都在缓存中无效,以便当我导航到该人的页面时,我可以在我刚刚添加的聚会中看到他们。

突变的有效载荷类似于:

fragment on CreatePartyMutationPayload {
    party
    partyMembers - not sure what type this should be, an array of ids?
}

我需要什么getConfigs 和/或有效负载结构来告诉 Relay,partyMembers 数组中的每个人都需要让缓存中的party 字段无效?

另外,可能有一些服务器端规则,如果我邀请一个人,他们的伙伴也会被自动邀请。这意味着我没有明确的Person id 列表,这些列表将在客户端突变对象中失效,直到有效负载返回。如何确保Payload中的党内所有人都失效?

【问题讨论】:

  • 这并不是问题的真正答案,但我设法通过使用 react-relay-router 并确保更改的数据始终位于不同的路由中,然后打开 forceFetch所以relay总能得到路线变化的最新数据。

标签: reactjs relayjs graphql


【解决方案1】:

一个人可以只参加一个聚会,还是可以参加多个聚会?我这么问是因为你使用了失效这个词。如果一个人可以参加多个聚会,那么我认为不需要无效。如果他们只能参加一个聚会,那么您可能需要确保根据需要调整连接。

您可以使用RANGE_ADD 将新派对添加到派对连接。如果您希望采用更有针对性的手动方法,您还可以使用RANGE_ADD 将人员添加到他们各自的聚会联系中。如果您需要从聚会中删除某人,您可以查看NODE_DELETE。如果您不太清楚要更改的对象或内容,但您知道派对参与者发生了一些变化,您可以采用“重新获取所有内容”的方法并使用FIELDS_CHANGE

如果您的服务器端逻辑很复杂并且在那里进行了很多变异,您可以使用FIELDS_CHANGE 重新获取所有内容,捕获任何更改,或者您可以尝试构建一个变异有效负载,以便它正确报告所有的变化。

【讨论】:

  • 他们可以参加多个聚会。我最终将 forceFetch 添加到每个 url 路由(使用 relay-react-router),以便它总是被刷新,因为失效逻辑太复杂了,但更改只在不同 url 中显示的页面上可见。
猜你喜欢
  • 2018-01-26
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 2018-07-15
相关资源
最近更新 更多