使用es6-maps

时间:2016-12-31 10:13:35

标签: angular redux typescript2.0 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 个答案:

答案 0 :(得分:1)

reducer需要两个参数当前状态和操作

它应该返回一个新状态,它与当前状态的类型相同

来自redux文档:

  

reducer是一个纯函数,它接受前一个状态和一个动作,并返回下一个状态       (previousState,action)=&gt; newState

这是你的功能:

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

您当前的状态是Map<number, {}> 您应该返回Map<number, {}>

而不是那样,你返回一个包含action.payload(爆炸)的数组。

另外,你应该有一个返回当前状态的默认语句。

  

我们在默认情况下返回先前的状态。对于任何未知动作,返回先前状态非常重要。

使用地图和set方法时,您将改变原始对象。 它将变得非常难以确保不变性。如果您真的想使用地图,我认为您应该查看Immutable.js here