Reducer函数中Switch语句修正求助:无法生成预期状态
修正后的Reducer实现
你当前代码存在几个核心问题:
- 错误引用
initialState而非当前传入的state,reduce是逐步累积更新状态,必须基于当前状态计算新值 - 对象字面量语法错误,未指定要更新的属性键名
update_pos分支只处理了x坐标,漏了y坐标- default分支错误修改状态,应该直接返回原状态
- 存在语法错误:switch结构后多余的return位置错误,case里的表达式结尾多了分号
以下是修正后的完整代码:
const actions = [ { type: 'update_hp', payload: -200 }, { type: 'update_pos', payload: { x: 5, y: -10 } } ]; const initialState = { hp: 1000, xPosition: 200, yPosition: 200 }; const reducer = (state, action) => { switch (action.type) { case 'update_hp': return { ...state, hp: state.hp + action.payload }; case 'update_pos': return { ...state, xPosition: state.xPosition + action.payload.x, yPosition: state.yPosition + action.payload.y }; default: return state; } }; const state = actions.reduce(reducer, initialState); console.log(state); // 输出 { hp: 800, xPosition: 205, yPosition: 190 }
关键修正点说明:
- 所有状态更新都基于当前传入的
state,而非初始的initialState,确保每一步action都能正确累积修改 update_hp分支明确指定hp属性,用当前state的hp加上payload值update_pos分支同时更新xPosition和yPosition两个属性- default分支直接返回原state,处理未匹配的action类型
- 修正了对象字面量的语法错误,保证代码可执行
内容的提问来源于stack exchange,提问作者aw_codes
相关产品推荐
相关产品推荐

