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