@ngrx - 将商店查询链接到 BehaviorSubject
@ngrx - linking store query to BehaviorSubject
我有很多 Reducer 查询需要 Link 直到行为主题。目前我正在为每个人做这件事!
有没有更简洁的表达方式?
this._higherCurveObservable = this.store.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code));
this._higherCurveSubject = <BehaviorSubject<CurveSummary>>new BehaviorSubject(null).distinctUntilChanged();
this._higherCurveSubscription = this._higherCurveObservable.subscribe(x => this._higherCurveSubject.next(x));
this._higherCurveSubject.subscribe(x => this.higherCurveChange(x));
应该不需要创建单独的 BehaviourSubjects
,您可以只根据商店流创建所需的 Observables
。
(唯一一次你需要这样的东西——我不假设你这样做了——当你试图滥用 BehaviourSubject
以便能够从中获取数据时就是这种情况商店以及从侧面分派数据,在这种情况下,您应该重新考虑架构,因为这将违背 ngrx
拥有单一中央商店的概念.)
所以有多种方法可以用更少的开销来编写它。
示例 1:永远不会取消订阅的永久订阅(例如在服务中)
this.store
.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code))
.distinctUntilChanged()
.do(x => this.higherCurveChange(x))
.subscribe();
示例2:一个临时订阅,应该在特定时间点取消订阅(例如在Component中,当Component被销毁时应该取消订阅)
const higherCurve$: Observable<CurveSummary> = this.store
.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code))
.distinctUntilChanged();
this._higherCurveSubscription = higherCurve$.subscribe(x => this.higherCurveChange(x));
// ... some time later
this._higherCurveSubscription.unsubscribe();
我有很多 Reducer 查询需要 Link 直到行为主题。目前我正在为每个人做这件事!
有没有更简洁的表达方式?
this._higherCurveObservable = this.store.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code));
this._higherCurveSubject = <BehaviorSubject<CurveSummary>>new BehaviorSubject(null).distinctUntilChanged();
this._higherCurveSubscription = this._higherCurveObservable.subscribe(x => this._higherCurveSubject.next(x));
this._higherCurveSubject.subscribe(x => this.higherCurveChange(x));
应该不需要创建单独的 BehaviourSubjects
,您可以只根据商店流创建所需的 Observables
。
(唯一一次你需要这样的东西——我不假设你这样做了——当你试图滥用 BehaviourSubject
以便能够从中获取数据时就是这种情况商店以及从侧面分派数据,在这种情况下,您应该重新考虑架构,因为这将违背 ngrx
拥有单一中央商店的概念.)
所以有多种方法可以用更少的开销来编写它。
示例 1:永远不会取消订阅的永久订阅(例如在服务中)
this.store
.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code))
.distinctUntilChanged()
.do(x => this.higherCurveChange(x))
.subscribe();
示例2:一个临时订阅,应该在特定时间点取消订阅(例如在Component中,当Component被销毁时应该取消订阅)
const higherCurve$: Observable<CurveSummary> = this.store
.let(getCurveSummaryForInstrumentTimeframe(this._instrument, this._timeframe.Code))
.distinctUntilChanged();
this._higherCurveSubscription = higherCurve$.subscribe(x => this.higherCurveChange(x));
// ... some time later
this._higherCurveSubscription.unsubscribe();