如何解决rxfire 订阅未在 componentdidmount 中触发
我正在使用 rxfire 在 componentdidmount 中合并来自 firestore 的数据:
store$.pipe(
withLatestFrom(items$),map(([store,items]) => ({ items,...store })),).pipe(
withLatestFrom(categories$),categories]) => ({ categories,).subscribe(store => {
this.setState({ store: store,isLoading: false });
})
这段代码的问题不是触发,屏幕卡在加载组件上。如果我第二次加载屏幕,它就会工作。难道我做错了什么?我该如何解决它
解决方法
如果它在您重新加载之前不起作用,则可能存在基于 items$
和 categories$
何时发出自己的值的计时问题。
将这些 observable 结合起来的一种更安全的方法是使用 RxJS 的 combineLatest()
特性。它接受一个 observable 数组,并且在收到 每个 observable 的值之前不会发出。
combineLatest([store$,items$,categories$]).pipe(
map(([store,items,categories])=>({...store,...items,...categories})),tap(store=>this.setState({ store,isLoading: false })
).subscribe();
记住 combineLatest()
,如果数组内的任何 observable 不发出值,那么 combineLatest()
将永远不会发出值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。