如何保持ngrx DRY? [已关闭]

问题描述 投票:0回答:3

(DRY = 不要重复自己)

我有两个状态。一种涉及汽车,一种涉及飞机。

所有动作都是复制粘贴并更改动作名称。

所有效果都是复制粘贴并更改效果名称和请求 URL。

所有的减速器本质上都是复制和粘贴。

有什么方法可以避免 ngrx 中的这种重复吗?

angular ngrx
3个回答
2
投票

首先请记住,actions/reducer 不是样板文件。虽然感觉可能如此,但这并不是因为您的域不同,例如员工不是订单。

也就是说,有 @ngrx/entity 可以管理您的收藏。

还有 ngrx-data 可以创建你所说的一切(动作、减速器、效果和服务)。


1
投票

当然有,您可以完美地将泛型应用于状态和效果。操作在您的商店中按其类型进行标识,因此请确保将其包括在内,然后就可以开始了。

可悲的结果是,当使用你的动作时,你需要添加逻辑,因为

store.dispatch(new Load('car'));

坦率地说,不太好,也不太安全

store.dispatch(new LoadCar());



对于效果,是的,您可以创建一个接受多种类型的效果:

$loadCar = this.actions.pipe(
   ofType([VehicleActions.loadCar, VehicleActions.loadTruck]),
   this.applyLoadLogic
)

$loadTruck = this.actions.pipe(
   ofType(VehicleActions.loadTrailer),
   obs => this.applyLoadLogic(obs, false)
)

applyLoadLogic(in: Observable<Action>, canDrive: boolean = true): Observable<Action> {
   return in.pipe(
      map(action => this.doMagic(action.payload, canDrive))
   );
}

1
投票

不,这是 ngrx(redux) 著名的“样板”,但请注意 ngrx 的作者给出了一些很好的提示
使用 NgRx 减少样板 - Brandon Roberts 和 Mike Ryan
https://www.youtube.com/watch?v=t3jx0EC-Y3c

© www.soinside.com 2019 - 2024. All rights reserved.