是否可以使用 Relay Modern 命令式突变 API 取消链接记录?

Posted

技术标签:

【中文标题】是否可以使用 Relay Modern 命令式突变 API 取消链接记录?【英文标题】:Is it possible to unlink a linked record using the Relay Modern imperative mutation API? 【发布时间】:2018-04-02 06:12:36 【问题描述】:

我想编写一个突变updater,将链接的记录与另一条记录取消链接。

例如,假设我的商店中有以下物品:

client:root 
  user: __ref: "someid"

我正在寻找一种方法来取消链接 userclient:rootuser 是一个可为空的字段。我希望对 user 字段感兴趣的订阅者看到它已经消失了 null

现在我看到取消链接此字段的唯一方法是从商店中删除节点。我尝试使用setLinkedRecord 将链接设置为null,但这会引发错误。

【问题讨论】:

你试过setValue 吗? facebook.github.io/relay/docs/… 是的,设置null 会导致错误。 您遇到了什么错误? 那个值不能是null 需要确切的错误信息进行调查 【参考方案1】:

.setLinkedRecored() 期望第一个参数是RecordProxy 的实例。使用.setValue() 取消链接节点,如whitep4nther commented above。

store.getRoot().setValue(undefined, 'user');

【讨论】:

嘿,感谢您添加此答案。当他离开@whitep4nther 的cmets 时,我一定误读了它们,因为您所说的很有道理。下次有机会时,我会尝试一下并投票/接受。 这不起作用。使用 undefinedsetValue() 设置链接字段不会改变商店。 这很奇怪。在我的用例中,在 commitLocalUpdate 回调中设置 nullundefined 没有任何问题。 是的,设置它null 有效。但随后记录被链接,只是空 我添加了一个示例应用程序,用于简单演示取消链接记录。 github.com/smagch/relay-example-unlinking-records 你可以看到工作示例:smagch.github.io/relay-example-unlinking-records【参考方案2】:

我也只是在与这个问题作斗争,在挖掘了中继代码库之后,我认为现在没有合适的方法来解决这个问题。我有opened an issue here。

【讨论】:

以上是关于是否可以使用 Relay Modern 命令式突变 API 取消链接记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Relay Modern 上的突变错误?

是否可以从 Relay 突变访问 GraphQL 验证错误?

Relay Modern-React Native 集成的资源

如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?

ReactJS Relay Modern:选择哪个路由器?

带有 Relay-GraphQL 突变的撤销-重做状态遍历模式