javascript - 处理上传多个上传反应的状态
问题描述
我想在上传 1 张图片后添加数据
const [file, setFile] = useState(null);
const handleUpload = (e) => {
setFile(e.target.files);
};
<input
type="file"
onChange={(e) => handleUpload(e)}
ref={fileInputRef}
multiple
/>
如果我一次选择 2 个或更多文件,这是可行的。但是我想在选择 1 张图片后处理。用户将使用相同的输入上传。
我尝试使用下面的方法并创建错误 TypeError: file is not iterable
const handleUpload = (e) => {
setFile([...files, e.target.files]);
};
或者
const handleUpload = (e) => {
let filesArray = file;
if (file) {
for (var i = 0; i < file.length; i++) {
filesArray.push(e.target.files[i]);
}
}
setFile(filesArray);
};
你们有什么解决办法吗?
解决方案
您应该首先将文件的默认值设置为您的数组useState
,然后在使用 set 方法时,您需要spread (...)
正确使用运算符。这将解决您的错误TypeError: file is not iterable
以下是您需要执行的更改。
export default function InputComponent() {
const [file, setFile] = React.useState([]);
const handleUpload = (e) => {
setFile([...file, ...e.target.files]);
};
return (
<div>
<input type="file" onChange={(e) => handleUpload(e)} multiple /><br/><br/>
<textarea value={file}/>
</div>
);
}
推荐阅读
- azure - 使用 KeyVault (Terraform) 从 ACR 中提取图像时出现 Azure 应用服务错误
- javascript - Razor 页面 jQuery Autocomplete 什么都不做
- javascript - 如何更改 Object JS 中的键?
- c++ - 客户端套接字可绑定但不可连接,因为已在使用中
- python - 覆盖 Python Selenium WebDriver.get() 以捕获 TimeoutException
- javascript - d3-lasso 在 Angular 7 中找不到 d3-drag 模块
- javascript - 没有得到输入标签的总值
- python - 如何使用 Selenium 选择 php 过滤器和下载文件
- python - 捕获所有模块的异常
- r - R:从一个数据框中提取行,基于列名匹配另一个数据框中的值