2016-12-31 66 views
0

季節問候大家!使用es6地圖創建ngrx /商店減速器

我有以下幾點:

static PhoneActions.ADD = '[Phone] ADD'; 

export const phonesReducer: ActionReducer< Map<number, {}>> = (
    state: Map<number, {}> = new Map<number, {}>(), action?: Action) => { 
    switch (action.type) { 
    case PhoneActions.ADD: 
     return [...action.payload] 
}; 

目前,我只返回的有效載荷,而無需使用我認爲這是不正確的當前狀態。有效載荷是完整的地圖,而不是地圖中的項目。

我該如何解決這個問題?或者它是好的?

回答

1

甲減速器需要兩個參數當前狀態和動作

它應該返回一個新的狀態,這是當前狀態的相同類型

從終極版文檔:

減速器是一個純粹的函數,它先前的狀態和動作,並返回下一狀態。
(previousState,動作)=> newState

這是你的功能:

export const phonesReducer: ActionReducer< Map<number, {}>> = (state: Map<number, {}> = new Map<number, {}>(), action: Action) => { ... } 

您當前的狀態是Map<number, {}>
您應該返回Map<number, {}>

取而代之,你返回一個包含action.payload的數組(爆炸)。

另外,你應該有一個返回當前狀態的默認語句。

我們在默認情況下返回以前的狀態。返回之前的狀態對於任何未知動作很重要。


當使用地圖和set方法,你會變異原始對象。 確保不變性將變得非常困難。如果你真的想使用地圖,我想你應該看看Immutable.jshere