繁体   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