我在模态中有一个组件可以上传多个文件,当所有文件都已上传时必须关闭它,如果其中一个文件无法上传,则会给我一条消息.eg(文件太大)
组件 - ModalUploadFile.jsx
this.state = {
files: [file1, file2, file2]
}
点击提交按钮时将调用以下代码
uploadFile = () => {
this.refs.btn.setAttribute("disabled", "disabled");
this.state.files.map( function(file) {
this.props.saveFile(this.props.selected_candidate.id, file)
}, this
)
}
Sagas.js
function* saveFile(action) {
try {
let file = action.file
let formData = new FormData()
formData.append("file", file)
let result = yield fetch(URL, {
method: "POST",
credentials: "same-origin",
body: formData
}).then(response => response.json()).then(data => {
return data
})
yield put({
type: actionTypes.FILE_UPLOADED,
ci: result
})
yield put({
type: actionTypes.CLOSE_MODAL
})
} catch (ex) {
console.log(ex)
}
}
目前,上传模式将在其中一个文件成功上传后关闭。
答案 0 :(得分:1)
现在,从您的组件中,您将映射数组并将一个文件传递给saga进行上载。一旦完成,你的传奇将调度FILE_UPLOADED动作,因此你的模态将被关闭。更新您的传奇以接受文件数组。并且从saga中,只有在上传数组中的所有文件时才能调度操作。
以下是一个例子:
function* saveFiles() {
const results = yield all(action.payload.files.map(id => call(saveFile, file)));
yield put({ type: FILES_UPLOADED, payload: { results } })
}
function saveFile(file) {// make your fetch call for each file and return result}