季节问候大家!
我有以下内容:
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]
};
目前,我只返回有效载荷而不使用我认为不正确的当前状态。有效载荷是完整的地图,而不是地图中的项目。
我怎么能纠正这个?或者它很好吗?
答案 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