2016-12-16 42 views
6

我有一個FileUpload組件通過一個redux表單字段連接。當在輸入字段中選擇文件時,它將所選文件的input.onChange和input.onBlur作爲base64字符串調用。異步驗證後的Redux表格文件上傳

我使用asyncValidator redux-form選項來驗證圖像的尺寸,並且我希望在異步驗證完成後將文件上傳到我的服務器。

似乎沒有任何形式的afterAsyncValidation掛鉤記錄。什麼是最好的方式來完成這種減少形式?

回答

1

redux-form的設計思想是你的數據將被保存到服務器提交

但是,沒有什麼能夠阻止您在異步驗證後使用自己的.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。有沒有什麼辦法可以讓它通過目標'iframe'來執行HTML提交,以便我們可以支持舊的瀏覽器? – Andy