[英]Redux Observable Epic conditional statement using RXJS
我正在嘗試通過在redux-observable中編寫史詩來實現特定場景。
視圖中的元素
一個下拉列表:下拉列表具有國家,一個文本框:具有用戶名字段一個復選框:用戶選擇角色的角色(類似於admin與standard)
Redux State存儲以下內容
國家(地區)下拉值文本框的值和狀態(禁用或啟用)復選框狀態
假設條件
如果禁用了文本框,則表示該文本框已具有某些值。
每當用戶更改下拉列表中的值,或者如果他取消選中復選框(當值為false時)或文本框被禁用,我都需要調用api(接受國家和用戶名作為輸入)。
export default (action$: Observable<any>, state$: State$) => {
const countryValue$ =
state$.pipe(
map(o => o.countryCode),
distinctUntilChanged(),
filter(Boolean),
);
const email$ =
state$.pipe(
filter(o => o.isTextBoxLocked),
filter(o => o.isAdmin === false),
map(o => email),
distinctUntilChanged(),
);
return combineLatest(countryValue$, email$)
.pipe(map(([country, email]) =>
actions.fetchData(country, email)));
};
問題是,如果復選框的值為true,仍然會觸發api調用(因為它會選擇電子郵件流發出的最后一個值)。 我該如何解決? 發生這種情況是因為我使用了CombineLatest。
在rxjs中有四種訂閱多個流的方法。
CombineLatest,Zip,WithLatestFrom,ForkJoin
一切都有自己的目的。 有關更多詳細信息, 請https://scotch.io/tutorials/rxjs-operators-for-dummies-forkjoin-zip-combinelatest-withlatestfrom
您的問題似乎有所不同,並且不是基於運算符,盡管您沒有向其寫入訂閱者,但由於復選框中的更改而引發了該請求。 而是它的一部分狀態。 您可能必須檢查過濾條件,並且鍵distantUntilChanged()是否達到了目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.