Свойство Redux формы submitSucceeded установлено в значение true, прежде чем отправка не удастся - PullRequest
0 голосов
/ 29 января 2019

Я отправляю действие, которое выполняет вызов API в методе asyncValidate в виде редукса.Вызов API не удается.Я пытаюсь показать сообщения об успешной и неудачной отправке в форме, но submitSucceeded всегда получает значение true, прежде чем вызов API завершится неудачно.Поэтому я всегда получаю сообщение об успешной отправке, прежде чем вижу сообщение об ошибке.

Перед использованием asyncValidate я попробовал то же самое в методе onSubmit.Я выкидываю ошибку внутри действия, но это не помогает.

Вот код для компонента:

    const SubmissionForm = ({handleSubmit, submitFailed, submitSucceeded, asyncValidating}) => 
    <Form onSubmit={handleSubmit}>
    {submitFailed && <div>Failed</div>}
    {submitSucceeded && <div>Succeeded</div>}
    {asyncValidating && <div>Validating...</div>}
        <Field name={`name`} type="text" component={"input"} />
    </Form>

    const enhancer = {

    connect(null,{ editUser }),

    reduxForm({
    form: "editUser",
    asyncBlurFields: [],
    onSubmit: () => {},
    asyncValidate: async (data, _, {editUser}) => {
      return await editUser(data)
        }
     })
   }

И код для действия:

    const editUserStart = (user) => ({ type: EDIT_USER_START, user })
    const editUserSuccess = (user) => ({ type: EDIT_USER_SUCCESS, user })
    const editUserError = (error) => ({ type: EDIT_USER_ERROR, error })

    const editUser = (data) => async dispatch => {
    dispatch(editUserStart(data))
    try {
    const response = await api.postUserInfo(data)
    if (response.error) {
      throw new Error(response.error)
    }else{
    return dispatch(editUserSuccess(data))
    }
    } catch (e) {
    dispatch(setSubmitFailed("editUser", e))
    dispatch(editUserError(e))
    }
    } 

Как я могу запретить форме устанавливать submitSucceeded до сбоя?

1 Ответ

0 голосов
/ 29 января 2019

Вероятно, ваша проблема с функцией editUser.Не могли бы вы, пожалуйста, console.log это const response = await api.postUserInfo(data) и убедиться, что response.error существует?

...