是否可以使用 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"
我正在寻找一种方法来取消链接 user
和 client:root
。 user
是一个可为空的字段。我希望对 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 时,我一定误读了它们,因为您所说的很有道理。下次有机会时,我会尝试一下并投票/接受。 这不起作用。使用undefined
和 setValue()
设置链接字段不会改变商店。
这很奇怪。在我的用例中,在 commitLocalUpdate
回调中设置 null
或 undefined
没有任何问题。
是的,设置它null
有效。但随后记录被链接,只是空
我添加了一个示例应用程序,用于简单演示取消链接记录。 github.com/smagch/relay-example-unlinking-records 你可以看到工作示例:smagch.github.io/relay-example-unlinking-records【参考方案2】:
我也只是在与这个问题作斗争,在挖掘了中继代码库之后,我认为现在没有合适的方法来解决这个问题。我有opened an issue here。
【讨论】:
以上是关于是否可以使用 Relay Modern 命令式突变 API 取消链接记录?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以从 Relay 突变访问 GraphQL 验证错误?
Relay Modern-React Native 集成的资源
如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?