React Reducer中无法访问state:如何获取当前状态输入值?
问题解决:Reducer中无法访问state.inputValues
你遇到的错误根源是Reducer函数没有始终返回状态值,导致后续调用时state变为undefined,进而访问state.inputValues时报错。React的useReducer要求Reducer必须始终返回一个状态对象,如果某个分支没有返回值,或者缺少默认分支处理未匹配的action类型,都会让state变成undefined。
修复后的Reducer代码
export function reducer(state, action) { switch(action.type) { case "handleInputChanged": const {id, value, validationResult} = action.payload; console.log(state.inputValues); // 现在可以正常访问 // 返回更新后的状态(不可直接修改原state,需用展开运算符复制) return { ...state, inputValues: { ...state.inputValues, [id]: value }, inputValidities: { ...state.inputValidities, [id]: validationResult } }; // 必须添加default分支,确保未匹配的action返回当前state default: return state; } }
关键修复点
- 每个case分支必须返回新状态:使用对象展开运算符
...state复制原状态,再修改需要更新的字段,保证状态的不可变性。 - 添加default分支:处理所有未匹配的action类型,返回当前
state,避免state变为undefined。
内容的提问来源于stack exchange,提问作者Eesa Munir
相关产品推荐
相关产品推荐

