在 Relay.js 中创建和删除根查询
Root Query Create and Delete in Relay.js
我想弄清楚如何在没有父节点的情况下使用中继创建和删除节点。好像NODE_DELETE
/RANGE_DELETE
和RANGE_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 中找到)
我想弄清楚如何在没有父节点的情况下使用中继创建和删除节点。好像NODE_DELETE
/RANGE_DELETE
和RANGE_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 中找到)