干不要重复自己
我有两种状态。
一项涉及汽车,一项涉及飞机。
所有动作都是复制和粘贴并更改动作名称。
所有效果都是复制和粘贴并更改效果名称和请求URL。
所有reducer本质上都是复制和粘贴。
有什么办法可以避免在ngrx中重复?
Thx
答案 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可以创建您所说的所有内容(动作,还原剂,效果和服务)。