Angular NGRX商店选择器的正确使用
我在应用程序中使用Ngrx来存储状态。 假设我的商店有两个项目itemA和itemB。 我的componentX对itemA中的更改做出反应,并触发一个函数,该函数进一步执行一些更复杂的计算,这需要itemB的当前值Angular NGRX商店选择器的正确使用,angular,ngrx,ngrx-store,Angular,Ngrx,Ngrx Store,我在应用程序中使用Ngrx来存储状态。 假设我的商店有两个项目itemA和itemB。 我的componentX对itemA中的更改做出反应,并触发一个函数,该函数进一步执行一些更复杂的计算,这需要itemB的当前值 ComponentX { pi = 3.15; date = new Date(); constructor(private appStore: Store<AppState>){} ngOnInit() { this.
ComponentX {
pi = 3.15;
date = new Date();
constructor(private appStore: Store<AppState>){}
ngOnInit() {
this.appstore.select(selectItemA).subscribe(
(itemA) => someComplexFunction(itemA)
)
}
someComplexFunction(itemA) {
/* Requires itemB */
}
}
然而,componentX并不关心itemB何时更改,它只需要itemA更改时itemB的当前值。我无法从我的状态中删除itemB,因为其他组件需要它。
在这种情况下,编写选择器的正确方法是什么。您可以使用withLatestFrom运算符
类似于withLatestFromthis.appstore.SelectItemB的内容将为您提供B
看一看这个例子,在这个例子中,同样的事情实际上是这样做的:
原理与withLatestFrom运算符相同
类似于withLatestFromthis.appstore.SelectItemB的内容将为您提供B
看一看这个例子,在这个例子中,同样的事情实际上是这样做的:
原理是一样的您可以订阅itemA selector,然后使用itemB selector的Latest通过,或者您可以为我们提供有关某个复杂功能的更多信息吗?它是纯功能还是有副作用?如果它是纯函数,那么你应该完全为它编写另一个选择器。@maxime1992:它不是纯函数Dee zg answer是正确的。你可以订阅itemA selector,并使用itemB selector的最新版本来完成它。你能给我们一些关于某个复杂函数的更多信息吗?它是纯功能还是有副作用?如果它是纯函数,那么您应该为它完全编写另一个选择器。@maxime1992:它不是纯函数Dee zg answer是正确的。下面的代码是为val this.appstore.selectselectItemA.pipewithLatestFromselectItemB.subscribeval=>console.logvalI意识到错误,使它现在可以工作。感谢您的帮助,下面的代码是为val this.appstore.selectselectItemA.pipewithlatest fromselectitemb.subscribebeval=>console.logvalI意识到错误,使其立即工作。谢谢你的帮助