NgRx 选择器 - 冷或热可观察
NgRx Selector - cold or hot observable
我知道 ngrx 存储是基于这个答案的热门观察:
我的问题是选择器是热可观察对象还是冷可观察对象?
谢谢!
它很冷,因为它不会订阅源,直到有人订阅它。
除了 share
和 publish
运算符之外的大多数运算符都会创建冷可观察对象。
选择器是纯函数而不是可观察值。
您可能问的是 select
运算符或函数。
this.store.pipe(select(...)) // or this.store.select(...)
基本上就是这样
this.store.pipe(
map(...),
distinctUntilChanged()
)
map
和 distinctUntilChanged
并没有真正使可观察到的热或冷。如果他们被订阅,他们只会订阅他们的来源,所以只有当你订阅时,数据才会流经他们。但是,如果来源(例如商店)在您订阅之前从生产者那里收到物品(即很热),您将不会收到它们。
所以订阅 this.store.pipe(select(...))
不会告诉商店开始产生价值,商店会在此之前发出价值,因为它正在积极倾听其生产者(reducers 和动作),但是 select
不会收听商店,除非您订阅,否则不会有数据流经它。
我知道 ngrx 存储是基于这个答案的热门观察:
我的问题是选择器是热可观察对象还是冷可观察对象?
谢谢!
它很冷,因为它不会订阅源,直到有人订阅它。
除了 share
和 publish
运算符之外的大多数运算符都会创建冷可观察对象。
选择器是纯函数而不是可观察值。
您可能问的是 select
运算符或函数。
this.store.pipe(select(...)) // or this.store.select(...)
基本上就是这样
this.store.pipe(
map(...),
distinctUntilChanged()
)
map
和 distinctUntilChanged
并没有真正使可观察到的热或冷。如果他们被订阅,他们只会订阅他们的来源,所以只有当你订阅时,数据才会流经他们。但是,如果来源(例如商店)在您订阅之前从生产者那里收到物品(即很热),您将不会收到它们。
所以订阅 this.store.pipe(select(...))
不会告诉商店开始产生价值,商店会在此之前发出价值,因为它正在积极倾听其生产者(reducers 和动作),但是 select
不会收听商店,除非您订阅,否则不会有数据流经它。