我一直在閱讀的東西在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