Uncaught TypeError: dispatch(...).then is not a function
Uncaught TypeError: dispatch(...).then is not a function
容器组件
import { connect } from 'react-redux';
import { signUpUser } from '../actions/userActions';
import Register from '../components/register';
function mapStateToProps(state) {
return {
user: state.user
};
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Register);
注册表单
import React, { Component, PropTypes } from 'react';
import { Link } from 'react-router-dom';
import { reduxForm, Field, SubmissionError } from 'redux-form';
import { signUpUser } from '../actions/userActions';
//Client side validation
function validate(values) {
var errors = {};
var hasErrors = false;
return hasErrors && errors;
}
//For any field errors upon submission (i.e. not instant check)
const validateAndSignUpUser = (values, dispatch) => {
//console.log(values);
return dispatch(signUpUser(values))
.then((response) => {
console.log(response);
});
};
class SignUpForm extends Component {
render() {
const { handleSubmit } = this.props;
return (
<div className="col-md-6 col-md-offset-3">
<h2>Register</h2>
<form onSubmit={ handleSubmit(validateAndSignUpUser) }>
<div className ='form-group'>
<label htmlFor="firstname">Name</label>
<Field name="firstname" type="text" component= "input"/>
</div>
<div className ='form-group'>
<label htmlFor="username">Username</label>
<Field name="username" type="text" component= "input"/>
</div>
<div className ='form-group'>
<label htmlFor="password">Password</label>
<Field name="password" type="text" component= "input"/>
</div>
<div className="form-group">
<button className="btn btn-primary">Register</button>
<Link to="/" className="btn btn-error"> Cancel </Link>
</div>
</form>
</div>
)
}
}
export default reduxForm({
form: 'SignUpForm', // a unique identifier for this form
validate
})(SignUpForm)
操作
import axios from 'axios';
export function signUpUser(user) {
console.log(user);
const url = `https://jsonplaceholder.typicode.com/posts`
const request = axios.get(url);
return {
type: 'Register_User',
payload: request
};
}
当我提交此表单时出现以下错误。
此应用程序在组合减速器中使用 thunk、setup form reducer。
我哪里错了?我是 redux-form 和 thunk
的新手
Uncaught TypeError: dispatch(...).then is not a function
dispatch 的 return 值是内部函数的 return 值,在您的情况下是对象而不是承诺。 (https://github.com/reduxjs/redux-thunk#composition)
您必须直接在操作中 return axios.get(...)
(基本上 return 是一个 Promise),以便像您一样在 dispatch 的 return 值上调用 then()
在你的例子中。
我建议不要将注册请求放在单独的操作中,因为在 redux 表单的提交功能中处理请求更容易。否则,可能很难处理来自服务器的带有验证消息的响应。我还认为您不需要在任何其他地方重复使用该操作,对吗?如果您需要在注册后更改状态中的某些内容,您可以简单地创建另一个操作,例如 "signedUpUser" 并向其传递一些数据。
容器组件
import { connect } from 'react-redux';
import { signUpUser } from '../actions/userActions';
import Register from '../components/register';
function mapStateToProps(state) {
return {
user: state.user
};
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Register);
注册表单
import React, { Component, PropTypes } from 'react';
import { Link } from 'react-router-dom';
import { reduxForm, Field, SubmissionError } from 'redux-form';
import { signUpUser } from '../actions/userActions';
//Client side validation
function validate(values) {
var errors = {};
var hasErrors = false;
return hasErrors && errors;
}
//For any field errors upon submission (i.e. not instant check)
const validateAndSignUpUser = (values, dispatch) => {
//console.log(values);
return dispatch(signUpUser(values))
.then((response) => {
console.log(response);
});
};
class SignUpForm extends Component {
render() {
const { handleSubmit } = this.props;
return (
<div className="col-md-6 col-md-offset-3">
<h2>Register</h2>
<form onSubmit={ handleSubmit(validateAndSignUpUser) }>
<div className ='form-group'>
<label htmlFor="firstname">Name</label>
<Field name="firstname" type="text" component= "input"/>
</div>
<div className ='form-group'>
<label htmlFor="username">Username</label>
<Field name="username" type="text" component= "input"/>
</div>
<div className ='form-group'>
<label htmlFor="password">Password</label>
<Field name="password" type="text" component= "input"/>
</div>
<div className="form-group">
<button className="btn btn-primary">Register</button>
<Link to="/" className="btn btn-error"> Cancel </Link>
</div>
</form>
</div>
)
}
}
export default reduxForm({
form: 'SignUpForm', // a unique identifier for this form
validate
})(SignUpForm)
操作
import axios from 'axios';
export function signUpUser(user) {
console.log(user);
const url = `https://jsonplaceholder.typicode.com/posts`
const request = axios.get(url);
return {
type: 'Register_User',
payload: request
};
}
当我提交此表单时出现以下错误。 此应用程序在组合减速器中使用 thunk、setup form reducer。 我哪里错了?我是 redux-form 和 thunk
的新手Uncaught TypeError: dispatch(...).then is not a function
dispatch 的 return 值是内部函数的 return 值,在您的情况下是对象而不是承诺。 (https://github.com/reduxjs/redux-thunk#composition)
您必须直接在操作中 return axios.get(...)
(基本上 return 是一个 Promise),以便像您一样在 dispatch 的 return 值上调用 then()
在你的例子中。
我建议不要将注册请求放在单独的操作中,因为在 redux 表单的提交功能中处理请求更容易。否则,可能很难处理来自服务器的带有验证消息的响应。我还认为您不需要在任何其他地方重复使用该操作,对吗?如果您需要在注册后更改状态中的某些内容,您可以简单地创建另一个操作,例如 "signedUpUser" 并向其传递一些数据。