Если я выполняю все запросы аутентификации к своему API не непосредственно в функции «handleSubmit» response-redux, а в настраиваемом действии Redux, у меня возникает проблема с отображением любых ошибок, полученных сервером в качестве ответа.
Это действие аутентификации (authActions.js):
export const loginUser = userData => dispatch => {
axios
.post("auth/local/signin")
.then(res => {
dispatch({
type: SET_CURRENT_USER,
payload: res
});
})
.catch(err => {
dispatch({
type: GET_ERRORS,
payload: err.response.data
});
});
};
authReducer.js
import { SET_CURRENT_USER } from "../actions/types";
const initialState = {
isAuthenticated: false,
user: {}
};
export default function(state = initialState, action) {
switch (action.type) {
case SET_CURRENT_USER:
return {
...state,
isAuthenticated: Object.keys(action.payload).length > 0,
user: action.payload
};
default:
return state;
}
}
errorReducer.js
import { GET_ERRORS, CLEAR_ERRORS } from "../actions/types";
const initialState = {};
export default function(state = initialState, action) {
switch (action.type) {
case GET_ERRORS:
return action.payload;
case CLEAR_ERRORS:
return {};
default:
return state;
}
}
Единственное, что пришло в голову, - это подключиться к компоненту redux, а также redux-form, а затем перейти к сообщению о возможной ошибке через "новая SubmissionError (ошибки) ".Но это не работает при первой отправке.
class SignInForm extends Component {
handleSubmit = values => {
const userData = {
username: values.username,
password: values.password
};
this.props.loginUser(userData);
const { errors } = this.props;
console.log(errors);
errors.username = errors.user;
if (errors) throw new SubmissionError(errors);
};
render() {
const { valid, handleSubmit, submitting } = this.props;
return (
<View>
...
</View>
);
}
}
const mapStateToProps = state => ({
auth: state.auth,
errors: state.errors
});
const form = reduxForm({
form: "Login",
validate,
asyncValidate,
asyncChangeFields: ["username"]
})(SignInForm);
export default connect(
mapStateToProps,
{ loginUser }
)(form);