javascript - reactjs - 如何在没有提交按钮的情况下上传文件
问题描述
我有一个输入和提交按钮,用于通过 axios 和 multer 上传多个文件。它可以工作,但我想在没有提交按钮的情况下上传我的文件。所以它应该在我选择我的文件后立即上传它们。
这些是代码......我尝试使用回调方法,但无法弄清楚语法应该如何。上传函数后有没有办法调用uploadHandler函数。我不能简单地合并它们,因为状态给了我未定义的价值。* 我使用功能组件而不是类
function upload (e) {
const inputArr = new Array()
Array.from(e.target.files).forEach((piece)=>{
inputArr.push(piece.name)
})
setInputArray({inputArray: inputArr})
setInputFiles({inputFiles:e.target.files})
}
在此之后,这应该运行
function uploadHandler () {
const fd = new FormData();
if(inputFiles!=null)
{
for ( var element of inputFiles.inputFiles) {
console.log(element)
fd.append('file',element)
}
}
axios.post('/upload', fd)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
}
我用这些调用它们
<input type="file" id="file" name="file" multiple="multiple" onChange={upload}/>
<button onClick={uploadHandler}>Send Files</button>
解决方案
由于设置 setInputArray({inputArray: inputArr}) 时数组状态不会立即更新,因此直接调用 uploadHandler 会使数组为空。
要实现这一点,您需要 useEffect !
import React, { useState, useEffect } from 'react';
useEffect(() => {
uploadHandler(inputFiles);
}, [inputFiles]);
并且您必须将您的 uploadHandler 函数声明修改为:
function uploadHandler(files) {
let fd = new FormData(); // can't be a const if you want to add some key:value
if(files!=null)
{
for ( var element of files.inputFiles) {
console.log(element)
fd.append('file',element)
}
axios.post('/upload', fd)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
}
else
{
console.log("Nothing to upload");
}
}
推荐阅读
- c - C:矩阵向量乘积,两个双数相乘给出错误符号
- r - R bookdown,浮动目录下的文本
- python-3.x - 查找与专利相关的子专利的 Python 程序
- redis - 在 k8s 中创建 redis 部署时退避重启失败的容器
- javascript - 什么是中继操作名称?
- python - Generate every possible spacing within a specified string?
- java - adding custom css to button in JavaFX
- python - 递归在python代码中工作以找到最大值
- angular - Angular 7 - 未捕获的错误:网络错误
- php - POST 请求未正确到达 httpClient - ionic - php