簡體   English   中英

使用RXJS的Redux Observable Epic條件語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM