我试图弄清楚如何在没有父节点的情况下使用 Relay 创建和删除节点。似乎NODE_DELETE
/RANGE_DELETE
和RANGE_ADD
都需要一个父节点。有没有办法从 Relay.js 中的根查询对象执行创建和删除突变?
注意:我确实找到了可以使用 FIELDS_CHANGE 查询执行创建的示例,但它们缺少任何文档或原因。
您应该能够REQUIRED_CHILDREN
用于此目的。它目前没有很好的文档记录(甚至没有文档记录),并且它的名称有些混乱(因此,我们有一个重命名它和改进文档的任务)。以后很可能会改名EXTRA_FRAGMENT
。
通常,当您发出突变时,我们会在“胖查询”(所有可能因突变而改变的字段)和“跟踪查询”(您的应用程序为节点请求的所有字段)之间执行交集到目前为止,当它们发生变化时应该更新),我们将此查询发送到带有突变的服务器。
因此,对于创建一个没有父节点的全新节点的用例,您可以在 中指定一个标识字段id
,REQUIRED_CHILDREN
然后使用它来导航到显示新创建对象的视图。这个答案有一个非常详细的例子,说明你将如何做到这一点。
你可以client:root
作为parentID
. 然后你pathToConnection
会是['client:root', 'someConnection']
。
(用 Relay Modern 测试。不确定这是否也适用于 Relay Classic,但无论如何现在都已正式弃用。但这仍然是该问题的最佳 Google 搜索结果之一,因此请回答。)
(在这个 GitHub 问题中找到)