【发布时间】:2016-10-14 10:46:14
【问题描述】:
我正在尝试使用redux-form 创建一个表单并在基于react-redux-starter-kit 的项目中使用它
这是我的容器
import { connect } from 'react-redux'
import { loginUser, logoutUser } from '../modules/login'
import Login from '../components/Login'
const mapDispatchToProps = {
loginUser,
logoutUser,
};
const mapStateToProps = state => ({
errorMessage: state.errorMessage,
});
export default connect(mapStateToProps, mapDispatchToProps)(Login)
这是表格
import React, { PropTypes } from 'react';
import { Input, Button, Card, CardText, CardTitle } from 'react-toolbox';
import { Field, reduxForm } from 'redux-form';
const Login = props => (
<form onSubmit={props.loginUser}>
<div>
<label htmlFor="email">Email</label>
<Field name="email" component="input" type="email"/>
</div>
<div>
<label htmlFor="password">Password</label>
<Field name="password" component="input" type="password"/>
</div>
<button type="submit">Submit</button>
</form>
);
export default reduxForm({ form: 'login' })(Login);
loginUser 函数看起来像
export function loginUser(creds) {
const config = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: creds.email,
password: creds.password,
}),
};
return (dispatch) => {
dispatch(requestLogin(creds))
return fetch('http://localhost:3001/auth/login', config)
.then(response => response.json().then(user => ({ user, response })))
.then(({ user, response }) => {
if (user.errors) {
const errors = user.errors.map(error => error.detail);
dispatch(loginError(errors))
return Promise.reject(loginError(errors));
}
dispatch(receiveLogin(user));
})
.catch(err => console.log('Error: ', err));
};
}
这个函数被调用,但我被重定向到
http://localhost:3000/login?email=test%40test.com&password=test
我找不到原因。你有什么想法吗?
这里是动作
function requestLogin(creds) {
return {
type: LOGIN_REQUEST,
isFetching: true,
isAuthenticated: false,
creds,
};
}
function receiveLogin(user) {
return {
type: LOGIN_SUCCESS,
isFetching: false,
isAuthenticated: true,
id_token: user.id_token,
};
}
function loginError(message) {
return {
type: LOGIN_FAILURE,
isFetching: false,
isAuthenticated: false,
message,
};
}
【问题讨论】:
-
您搜索过
loginError()吗?可以在内部调度重定向 -
你真的看到了 POST 请求吗?
-
确实没有 POST 请求。如果我将
debugger放在loginUser函数的开头,creds似乎是一个事件。 -
@DamienLeroux
loginError永远无法到达 -
和
requestLogin()?
标签: reactjs redux react-redux redux-form