我有以下的RXJS流:
我有以下的RXJS流:
this.widthBorder$.pipe(skip(1)).subscribe((value) => {
this.registryBoundaries.setAttribute('stroke-width', `${value || 0}`)。
});
this.widthBorderColor$.pipe(skip(1)).subscribe((value)=> {
this.registryBoundaries.setAttribute('stroke', `${value || 0}`);
});
this.drawContour$.pipe(skip(1)).subscribe((value)=> {
this.registryBoundaries.style.display = value ? 'block' : 'none';
});
你可以看到有一些重復的代碼,比如skip(1)還有一些方法是相似的?
我跳過第一個值,因為所有的流都是BehaviorSubject。
如何優化它?
uj5u.com熱心網友回復:
看來你應該使用Subject而不是BehaviorSubject來處理這種情況。主題在訂閱時將不會發出初始值,這將使你不必使用skip運算子。
對于從多個觀察變數中讀取資料,并沒有什么神奇的解決方案。你可以使用像zip這樣的東西,這樣你就有了一個觀測變數的發射值陣列(但是你必須用startWith(null)來管理每個觀測變數,以便它們發射一個值,因為zip只有在所有觀測變數都發射出來之后才會發射出來)。你也可以使用merge來簡單地將所有的觀察變數融合成一個觀察變數,但是你將無法知道哪個觀察變數已經發射了接收的值,除非你添加某種標簽。
我認為一旦你從BehaviorSubject切換到Subject并洗掉所有的跳過運算子,你的實作就沒有問題了。如果你有10個這樣的訂閱,我會建議以編程方式創建觀察變數,但對于三個訂閱來說,沒有什么可以為你節省很多行的代碼。
uj5u.com熱心網友回復:
只需使用Subject而不是BehaviorSubject
BehaviourSubject
BehaviourSubject將回傳初始值或Subscription的當前值
Subject
Subject 不會回傳 Subscription 的當前值。它只在.next(value)呼叫時觸發,并回傳/輸出該值
Subject不會在Subscription上回傳當前值。
public widthBorder$ = new Subject(); public widthBorderColor$ = new Subject(); public rawContour$ = new Subject(); this.widthBorder$.subscribe(v => this.setAttribute('stroke', `${v || 0}`))。 this.widthBorderColor$.subscribe(v => this.setAttribute('stroke-width', `${v || 0}')。 this.drawContour$.subscribe((value) => { this.registryBoundaries.style.display = value ? 'block' : 'none'; }); public setAttribute(attr: string, value: string): void { this.registryBoundaries.setAttribute(attr, value)。 }轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323563.html
標籤:
下一篇:如何將日期格式改為只適用于小時
