rxfire 订阅未在 componentdidmount 中触发
rxfire subscription not firing in componentdidmount
我正在使用 rxfire 在 componentdidmount 中合并来自 firestore 的数据:
store$.pipe(
withLatestFrom(items$),
map(([store, items]) => ({ items, ...store })),
).pipe(
withLatestFrom(categories$),
map(([store, categories]) => ({ categories, ...store })),
).subscribe(store => {
this.setState({ store: store, isLoading: false });
})
此代码的问题是未触发且屏幕卡在加载组件上。如果我第二次加载屏幕,它就会工作。难道我做错了什么?我该如何解决
如果它在您重新加载之前无法正常工作,则可能是基于 items$
和 categories$
何时发出它们自己的值的时间问题。
一种更安全的组合这些可观察量的方法是使用 RxJS 的 combineLatest()
特性。它接受一个 observable 数组,并且在从 every observable.
接收到一个值之前不会发出
combineLatest([store$, items$, categories$]).pipe(
map(([store, items, categories])=>({...store, ...items, ...categories})),
tap(store=>this.setState({ store, isLoading: false })
).subscribe();
请记住 combineLatest()
如果数组中的任何可观察对象不发出值,那么 combineLatest()
将永远不会发出值。
我正在使用 rxfire 在 componentdidmount 中合并来自 firestore 的数据:
store$.pipe(
withLatestFrom(items$),
map(([store, items]) => ({ items, ...store })),
).pipe(
withLatestFrom(categories$),
map(([store, categories]) => ({ categories, ...store })),
).subscribe(store => {
this.setState({ store: store, isLoading: false });
})
此代码的问题是未触发且屏幕卡在加载组件上。如果我第二次加载屏幕,它就会工作。难道我做错了什么?我该如何解决
如果它在您重新加载之前无法正常工作,则可能是基于 items$
和 categories$
何时发出它们自己的值的时间问题。
一种更安全的组合这些可观察量的方法是使用 RxJS 的 combineLatest()
特性。它接受一个 observable 数组,并且在从 every observable.
combineLatest([store$, items$, categories$]).pipe(
map(([store, items, categories])=>({...store, ...items, ...categories})),
tap(store=>this.setState({ store, isLoading: false })
).subscribe();
请记住 combineLatest()
如果数组中的任何可观察对象不发出值,那么 combineLatest()
将永远不会发出值。