私はredux sagaを使用してログイン還元フォームにエラーを表示する方法を理解しようとしています。私は要求をすることができますが、もしその応答が403 - 禁止されているなら、何らかの形でユーザーにメッセージを表示する必要があります。redux sagaとreduxフォームを使用して反応アプリにフォームエラーを表示
システム:
- は16.0.0
- Reduxの3.7.2
- Reduxの形7.1.2
- Reduxの-佐賀0.16.0
を反応させますlogin-form.js
import React, {Component} from 'react';
import {Field, reduxForm} from 'redux-form';
import {connect} from 'react-redux';
import {submit} from '../../actions';
class Login extends Component {
constructor(props) {
super(props);
this.onSubmit = this.onSubmit.bind(this);
}
onSubmit(values) {
this.props.submit(values);
}
renderField(field, label) {
// ommited
}
render() {
const {handleSubmit, error} = this.props;
return (
<Form onSubmit={handleSubmit(this.onSubmit)}>
{error ? error : ''}
<Field
name="email"
label="Email*"
type="email"
placeholder="Email"
component={this.renderField}
/>
<Field
name="password"
label="Heslo*"
type="password"
placeholder="Heslo"
component={this.renderField}
/>
<Button color="primary">Login</Button>
</Form>
);
}
}
export default reduxForm({
form: 'loginForm'
})(
connect(null, {submit})(Login)
);
actions.js:
export const submit = function(data) {
console.log("Action:", data);
return {
type: 'REQUEST_SUBMIT',
data: data
};
};
sagas.js:
import {takeEvery, fork, call, put} from 'redux-saga/effects';
import axios from 'axios';
import {SubmissionError} from 'redux-form';
async function submitToServer(data) {
try {
let response = await axios.post('http://localhost:3000/login', data);
yield put({type: 'REQUEST_SUCCESSFUL', payload: result.data})
} catch(error) {
throw new SubmissionError({_error: "Some error message"});
}
}
function* callSubmit(action) {
yield call(submitToServer, action.data);
}
function* submitSaga() {
yield takeEvery('REQUEST_SUBMIT', callSubmit);
}
export default function* root() {
yield [
fork(submitSaga)
];
}
すべてが期待どおりに動作しますが、私は実際に画面にログインフォームを作成する方法を見つけ出すことはできません私のサガで投げられたエラーメッセージ。私は実際にSubmissionError
を私のサガで投げなければならないのでしょうか、それとももっと良い方法がありますか?
ありがとう、しかし、それは私が求めているものではありません。あなたが書いたもののどれも、還元型にエラーを追加しません。私はredux形式の外で自分の状態にエラーを追加することができます知っているが、私がしたいのは、実際に要求フォームにエラーが発生した場合、エラーフィールドを入力します。 –