useReducer中Switch与IF写法差异及Switch版本失效问题排查
useReducer状态更新异常:字段拼写错误导致Switch分支失效
我在学习useReducer Hook时搭建了一个简易登录UI,遇到了这样的问题:Login.js中定义的passwordReducer,用Switch分支写法时状态无法更新,但换成IF分支写法就完全正常。
经过排查发现问题根源:Switch分支的PASSWORD_INPUT处理逻辑里,把状态字段isValid误写成了isVaild(字母顺序错误,将valid写成了vaild)。这个拼写错误导致Reducer返回的新状态里没有正确的isValid字段,进而引发状态更新异常。
错误的Switch分支代码:
case 'PASSWORD_INPUT': return { value: action.value, isVaild: action.value.trim().length > 6 // 拼写错误:isVaild → isValid };
修正后的正确代码:
case 'PASSWORD_INPUT': return { value: action.value, isValid: action.value.trim().length > 6 // 正确拼写 };
而IF写法能正常工作,是因为在IF分支的逻辑里使用了正确的isValid字段名,没有出现拼写错误。
内容的提问来源于stack exchange,提问作者TeddyBearJung
相关产品推荐
相关产品推荐

