gpt4 book ai didi

javascript - 如何在带有来自操作的 Prop (MemoizedSelectorWithProps) 的选择器效果中使用 withLatestFrom

转载 作者:行者123 更新时间:2023-11-28 03:37:32 24 4
gpt4 key购买 nike

我有一个带有 props 的选择器(类型为 MemoizedSelectorWithProps)。我想在 WithLatestFrom 内的效果中使用它。问题是 - 选择器的参数( Prop )来自操作负载。我无法使 withLatestFrom 访问操作有效负载。

我正在使用 Angular 7(当然还有 ngrx7)。我尝试使用 map 以某种方式创建一个新的可观察对象,但没有任何效果......

这些是我在这里编写的一些演示行,以简化我的用例:

行动:

export const GET_INVENTORY = '[App] Get Inventory';

export class GetInventory implements Action {
readonly type = GET_INVENTORY;
constructor (public branchId: number) {}
}

效果:

@Effect()
getInventory$ = this.actions$.pipe(
ofType(GET_INVENTORY)
withLatestFrom(this.store$.pipe(select(getIsStoreInventoryLoaded, {branchId: action.branchId}))), // this is not working obviously, since action is unknown
switchMap([action, loaded]: [GetInventory, boolean] => {
if (loaded) {
console.log('already loaded inventory for this branch', action.branchId);
} else {
console.log('never loaded inventory for this branch', action.branchId);
}
}

虽然这是我的代码的简化版本,但设计与我的实际项目有点相似 - 我有一个商店,每个“分支”库存都有 key 。假设我是一家链式超市,每个分店都有自己的库存页面,其中包含大量数据,如果我已经提取了,我不想再次提取。因此,如果您有不同的方法然后使用 MemoizedSelectorWithProps - 也请随意提出建议。

最佳答案

一个简单的switchMapmergeMapcombineLatest应该可以解决问题。

例如:

@Effect()
getInventory$ = this.actions$.pipe(
ofType(GET_INVENTORY),
mergeMap(action =>
combineLatest(
of(action),
this.store$.pipe(select(getIsStoreInventoryLoaded, {branchId: action.branchId}))
)
),
tap(([action, loaded]) => {
// The rest of your code...
})
)

关于javascript - 如何在带有来自操作的 Prop (MemoizedSelectorWithProps) 的选择器效果中使用 withLatestFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com