2016-08-02 2 views
3

Я хочу использовать подтверждение отправки и синхронизации формы редукции одновременно. Использование только одного из них в одно и то же время работает, но когда я использую оба вместе, похоже, что проверка синхронизации перезаписывает результаты проверки отправки.Результирующая форма - синхронизация и отправка подтверждения в том же виде

export default class MyForm extends Component{ 
    render() { 
     ... 
     return (
      ...<form> 
        <Button onClick={handleSubmit(submit)}>Submit</Button> 
       </form>... 
     ) 
    } 
} 

проверка Моя представить выглядит следующим образом:

const submit = (values, dispatch) => { 
    return new Promise((resolve, reject) => 
    { 
     setTimeout(() => { 
      reject({ Password: 'Wrong password', _error: 'Login failed'}) 
      console.log("rejected"); 
    }, 1000) // simulate server latency 
})} 

Теперь я хотел бы добавить синхронизации Aswell проверки, поэтому я добавил validate Aswell:

let myForm = reduxForm({ 
    ... 
    validate: validateForm 
})(MyForm); 

который выглядит следующим образом (снято с целью сокращения)

const validateForm = function(values){ 
    let errors = {} 
    if(values.Password == "notAllowed"){ 
     errors.Password = "this is not allowed" 
    } 

    console.log("validated sync", errors); 

    return errors; 
} 

Когда я теперь ввести что-то в поле пароля и нажмите отправить, я могу увидеть что-то вроде следующего:

  • «одобренного синхронизации», ...
  • (ударяя подать)
  • (второй раз): отклонено *
  • (сразу после этого): подтвержденная синхронизация.

Я вижу ошибки, связанные с проверкой синхронизации, но не ошибки проверки достоверности отправки (видимо, потому что она перезаписана выходом консоли сверху). Есть ли способ объединить эти два? Я хотел бы иметь подтверждение в реальном времени и на стороне сервера.

ответ

1

Целью проверки синхронизации является показать немедленный проблемы. Цель подтверждения проверки - показать проблемы, которые могут быть обнаружены только на сервере, например. «Запись уже существует». Как таковые, ошибки синхронизации приоритеты перед отправкой ошибок. Если поле password имеет как синхронизацию, так и ошибку проверки отправки, то ошибка, которую дает вам Redux Form, будет синхронизированной.

Также, Redux Form проверяет синхронизацию на каждом рендере. Поэтому не беспокойтесь о просмотре консольных распечаток из вашей функции проверки синхронизации.

То, что вы предлагаете, не может произойти, потому что форма Redux Form не отправит вашу форму, если проверка синхронизации не удалась. Поэтому они действительно не могут столкнуться. Кроме того, ошибки, связанные с конкретным полем, удаляются по CHANGE, поэтому после того, как вы перейдете и отредактируете значение, вы увидите только ошибки синхронизации.

Синхронизируйте и отправьте валидационную работу счастливо вместе. Если похоже, что это не так, значит, вы должны что-то делать неправильно, но я не могу определить его из опубликованных вами фрагментов.

Если вы действительно можете продемонстрировать свою проблему в JSBin или JSFiddle, это было бы здорово.

+0

«То, что вы предлагаете, не может произойти, потому что форма Redux Form не будет отправлять вашу форму, если проверка проверки прошла.»- Можете ли вы сказать« если проверка синхронизации не удалась ». @ Erik-r? –

+2

Да. Он не будет вызывать вашу функцию отправки, если проверка проверки не выполняется. –

+1

@ErikR. У меня такая же проблема: есть форма регистрации, что может привести к общей ошибке сервера, которую я хотел бы установить в поле _error. _error получает перезапись после отправки, что было бы лучшей стратегией для сохранения этой ошибки? – gcedo