我一直在阅读的东西在REDX一段时间。对我而言,这是一件奇怪的事情。在大多数人给出的例子中,所有的复制逻辑都是通过reducer来处理的。 我正在使用打字稿,并希望采用更多基于类的方法。但也许我错过了一些东西。克隆,然后mutatate方法在减少
比方说,我有一个购物车类。随着购物车减速器和购物车行动。 它看起来方式如下:
export class Cart
{
private items:{[key:string]:number} = {};
constructor(items:{[key:string]:number} = {})
{
Object.assign(this.items, items);
}
public addItem(id:string)
{
this.items[id] = this.items[id]?this.items[id]+1:1;
}
public removeItem(id:string)
{
this.items[id]--;
if(this.items[id] <= 0)
{
delete this.items[id];
}
}
public setItemsCount(id:string, count:number)
{
this.items[id] = count;
}
public clone():Cart
{
return new Cart(Object.assign({}, this.items));
}
}
所以,在这里我incapsulating一类克隆逻辑。
在我减速器我会签名去:
function reducer(state = new Cart(), action:Action): Cart {
//first clone, then mutate, then return
}
或者说,实际上,如何通过一个通用的方法只是深克隆的对象,那么他们变异,然后返回?这种方法有什么不好?
为什么不加一个'Cart'类的方法,它从你的动作中获取一个更新,并根据它的现有值和更新返回一个新的'Cart'实例? – adrice727