【发布时间】:2021-10-13 18:01:17
【问题描述】:
一般建议(在 Apollo 文档中)是在子组件中创建小的、集中的查询。
所以我们有几个这样的查询,它们都是我们监听值变化的“实时”查询。
我们还有一个 graphql 订阅,用于更新这些查询读取的部分缓存。
所以每次订阅发送更新时,查询都会自动更新。
这很好用,但我不确定我应该在哪里订阅。
这就是我们现在正在做的事情:
class AComponent {
ngOnInit() {
// Multiple instances of AComponent watch the same query.
// Works great - one request is sent to the server and
// all the others use the cache
this.queryService1.watch()...
// And we subscribe to a subscription that might update the cache
// and cause the query to update
this.subscription.subscribe();
}
}
既然AComponent有多个实例,可以全部订阅订阅吗?
【问题讨论】:
-
这看起来像是一些商店管理的用例,例如 NgRx。但这需要一些剧烈的重构。也许可以使用一些与 NgRx 具有相似和简化逻辑的服务。如果需要,您可以注入服务,并且您不会像那样使用它来耦合子组件和父组件。
-
@dallows 看不出它是如何解决问题的。问题仍然存在,在哪里订阅订阅。在一个地方或可以在多个地方完成而无需开销
-
这基本上是 NgRx 所做的。你有一个单一的事实来源,你在每个需要状态切片的组件中订阅它。所以组件中的多个订阅是没有问题的。只是代替父/顶级组件使用服务。
-
但我问的是订阅 graphql 订阅。换句话说,“激活”订阅(要求服务器向我们发送更新)。我不需要 NgRX 作为单一的事实来源,因为我已经有了 Apollo 缓存。
标签: angular apollo apollo-client