我很好奇处理突变的“正确”方法,其中大部分图表都会受到影响。最好的例子是删除一个“父”节点,导致删除一堆子节点。现有的变异配置(FIELDS_CHANGED,NODE_DELETE等)足以进行相对简单的操作,但我不确定处理更复杂事情的正确方法。
一个具体的例子会有所帮助。我们假设我们正在使用经典的Relay示例应用,并且正在使用三种特定类型:Ship
,Faction
和User
。我们假设Ships
属于Faction
(多对一),Users
有favorite_ships
个连接(多对多)。伪模式可能是这样的:
galaxy {
ships
factions { ships }
users { favorite_ships }
}
好吧,很酷。我们有一个名为“帝国”的Faction
,它有一堆船只,如“领带战斗机”,“星际驱逐舰”等等。然后我们有一个User
,其最喜欢的船只包括“领带战斗机“通过favorite_ships
连接。
到目前为止一切顺利。现在有些朋克出现并通过Faction
摧毁了整个“帝国”DestroyFactionMutation
。所述突变的输入非常简单:Faction
id,但突变对后端的影响很大:
Faction
节点Ship
节点也将被删除User { favorite_ship }
条目也将被删除因此,我的问题是:如何使用Relay编写变异有效负载,胖查询和变异配置?
在考虑了一下后,我想可能是这样的:
type DestroyFactionMutationPayload {
clientMutationId: String!
user: User
destroyedFactionId: String
affectedUserIds: [String]
destroyedShipIds: [String]
}
然后客户端会像这样更新:
Faction
对应的destroyedFactionId
节点,该节点已有详细记录且直截了当Ship
配置对应的destroyedShipIds
个节点,但使用 {/ 1>}的?您是否需要为每个parentID
生成一个NODE_DELETE,如果是,那么如何获取这些ID以便它们位于变异道具中... REQUIRED_CHILDREN?affectedUserIds
可以改变,给定user { favorite_ships }
(也可能通过REQUIRED_CHILDREN获取?)对不起,如果这是漫无目的,不清楚;希望这种“类型”的突变对于已经使用Relay一段时间的人来说是熟悉的。我可以尝试这些选项,但我想对这样的“最佳”方法提出一些建议。谢谢!