2016-12-16 6 views
6

У меня есть компонент FileUpload, который подключается через поле формы редукции. Он вызывает input.onChange и input.onBlur с выбранным файлом в качестве строки base64, когда файл выбран в поле ввода.Загрузка файла Redux-Form после проверки async

Я использую параметр asyncValidator redux-form для проверки размеров изображения, и я хотел бы, чтобы файл был загружен на мой сервер после завершения проверки асинхронизации.

Не похоже, чтобы какой-либо захват afterAsyncValidation был задокументирован. Каков наилучший способ сделать это в форме сокращения?

ответ

1

redux-form был разработан с идеей, что ваши данные будут сохранены на сервере по адресу submit.

Тем не менее, нет ничего, что помешало бы вам поставить свой собственный пункт .then() после проверки асинхронной проверки. Что-то вроде этого?

// async function you already have that is looking at your 
// picture field and rejecting the promise with errors 
import validateDimensions from './validateDimensions' 

// async function to upload the image 
import upload from './uploadImage' 

const MyForm = reduxForm({ 
    form: 'myForm', 
    asyncValidate: values => 
    validateDimensions() 
     .then(() => { 
     // we know validation passed 
     upload(values.prettyPicture) 
     //^not "return upload(values.prettyPicture)" to let this async 
     // validation promise resolve and do upload asynchronously 
     // after it has resolved 
     }) 
    }, 
    asyncBlurFields: [ 'prettyPicture' ] 
})(MyForm) 
+0

Предположим, я добавлю еще одну асинхронную проверку в мою форму. Не повторяет ли это все асинхронные проверки, таким образом, заставляя файл снова загружаться? – eNddy

+0

Да, поэтому это не подразумевается использование 'asyncValidate'. –

+0

@ErikR. есть ли способ заставить его выполнять HTML-представление с целевым 'iframe', чтобы мы могли поддерживать старые браузеры? – Andy