在 Relay.js 中创建和删除根查询

Root Query Create and Delete in Relay.js

我想弄清楚如何在没有父节点的情况下使用中继创建和删除节点。好像NODE_DELETE/RANGE_DELETERANGE_ADD都需要一个父节点。有没有办法从 Relay.js 中的根查询对象执行创建和删除突变?

注意: 我确实找到了可以使用 FIELDS_CHANGE 查询执行创建的示例,但它们缺少任何文档或原因。

您应该可以使用 REQUIRED_CHILDREN 来达到这个目的。它目前没有得到很好的记录(甚至没有记录),而且它的名称有点令人困惑(因此,we have a task 用于重命名它并改进文档)。将来可能会重命名为 EXTRA_FRAGMENT

通常,当您发出突变时,我们会在 "fat query"(所有可能因突变而改变的字段)和 "tracked query"(所有可能因突变而改变的字段)之间进行交集到目前为止,您的应用程序已经请求了一个节点,并且应该在它们发生变化时进行更新)并且我们将此查询发送到具有突变的服务器。

因此,对于创建一个没有父节点的全新节点的用例,您可以在 REQUIRED_CHILDREN 中指定一个识别字段,例如 id,然后将其用于,例如,导航到显示新创建对象的视图。 有一个非常详细的示例说明如何执行此操作。

您可以将 client:root 作为 parentID 传递。然后你的 pathToConnection 将是 ['client:root', 'someConnection'].

(使用 Relay Modern 进行测试。不确定这是否也适用于 Relay Classic,但无论如何现在已经正式弃用了。但这仍然是这个问题的前 Google 结果之一,所以回答。)

(在 this GitHub issue 中找到)