React Redux用户注册请求成功但Action未派发问题求助
问题分析与解决方案
我一眼就看到了两个关键问题,这就是你的Redux Action没派发的原因,咱们一步步来修复:
1. Action函数命名不匹配(核心问题)
你在Action文件里导出的函数叫signIn,但在你的RegisterForm组件里:
- 导入的是
{ signUp } from '../../actions/authActions' - connect映射的也是
{ signUp } - 提交时调用的是
this.props.signUp(this.state.data)
这就导致你调用的signUp根本不存在,自然不会派发任何Action!
修复方法:
统一命名即可,推荐把Action函数改成signUp,和组件调用保持一致:
export const signUp = data => dispatch => { dispatch({ type: SIGN_UP }) fetch(API_URL+'/register', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(data), }) .then(response => response.json()) .then(message => dispatch({ type: SIGN_UP_SUCCESS, payload: message })) .catch(error => dispatch({ type: SIGN_UP_FAILED, payload: error })) }
2. setState异步导致的错误校验逻辑失效(次要但重要)
在你的handleSubmit方法里,设置errors后立刻判断Object.keys(this.state.errors).length === 0,但React的setState是异步操作,这时候this.state.errors还是更新前的值,会导致即使有错误也可能执行提交逻辑。
修复方法:
直接使用刚生成的errs对象判断,不用等state更新:
handleSubmit = e => { console.log(this.state.data) e.preventDefault(); const errs = this.validate(this.state.data); this.setState({ errors: errs }); // 直接用errs判断,避免异步state更新的问题 if(Object.keys(errs).length === 0) { this.props.signUp(this.state.data) } }
额外检查点
- 确认
SIGN_UP、SIGN_UP_SUCCESS、SIGN_UP_FAILED这些常量已经正确定义并导入到Action和Reducer中 - 确认你的Redux Store已经正确集成了
authReducer
按照这些步骤修改后,你的Redux Action应该就能正常派发,同时表单校验逻辑也会更可靠。
内容的提问来源于stack exchange,提问作者Merim
相关产品推荐
相关产品推荐

