如何保持ngrx干燥?

时间:2018-09-24 14:45:08

标签: angular ngrx

干不要重复自己

我有两种状态。

一项涉及汽车,一项涉及飞机。

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

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

所有reducer本质上都是复制和粘贴。

有什么办法可以避免在ngrx中重复?

Thx

3 个答案:

答案 0 :(得分:1)

否,这是ngrx(redux)著名的“样板”,但请注意ngrx的作者提供了一些很好的提示
用NgRx减少样板-布兰登·罗伯茨和迈克·瑞安
https://www.youtube.com/watch?v=t3jx0EC-Y3c

答案 1 :(得分: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))
   );
}

答案 2 :(得分:1)

首先请记住,动作/减速器不是样板。虽然看起来像是,但这不是因为您的域不同,例如,雇员不是订单。

那是@ngrx/entity来管理您的收藏。

还有ngrx-data可以创建您所说的所有内容(动作,还原剂,效果和服务)。