Redux Reducer 状态刷新异常:为何无法通过 Action 分配新状态值?
核心问题:action creator 没有和
dispatch绑定
如果你现在组件里拿到的props.SetFormData,只是直接从父组件把原始的action creator透传下来、或者在connect配置里没有做dispatch包装,那么调用这个函数只会生成一个普通的action对象,根本不会把它派发到store流程里。没有action到达reducer,状态自然永远停留在初始值,控制台里看到的状态当然一直是空字符串。
正确的绑定方式是在connect配置里通过mapDispatchToProps关联这个action creator:// 不要直接把原始action creator当普通props传下去 // 推荐的connect写法 const mapDispatchToProps = { SetFormData } export default connect(null, mapDispatchToProps)(你的表单组件)经过这个配置后,组件内调用
props.SetFormData(...)时,才会自动把生成的action对象派发到store,触发reducer执行更新逻辑。取值时的大小写拼写错误
你的提交逻辑里写的是:props.SetFormData(formData.Login, formData.password)这里取登录值用了大写开头的
formData.Login,但你表单实际存的字段是小驼峰格式的login(参考你自己写的formData.password是小写p开头)。就算dispatch链路打通了,这里传进去的login值也会是undefined,最终reducer更新出来的login字段永远是空/未定义的值。把首字母改成小写就可以匹配到真实的表单值。快速校验的方法
你已经把store挂载到了window全局下,可以直接在控制台手动执行dispatch操作验证链路:window.store.dispatch({ type: 'SET-FORM-DATA', login: 'test', password: '123456' })如果执行后能看到store里的
form字段状态更新,说明你的reducer、store挂载、action类型匹配这部分逻辑全都是正常的,问题肯定出在组件层的dispatch绑定上。
内容的提问来源于stack exchange,提问作者Oleg Sachuk

