【问题标题】:handle state for uploading multiple upload react处理上传多个上传反应的状态
【发布时间】:2021-10-18 15:55:55
【问题描述】:

我想在上传 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);
};

你们有什么办法吗?

【问题讨论】:

    标签: javascript html reactjs file-upload


    【解决方案1】:

    您应该首先在useState 中将file 的默认值设置为数组,然后在使用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>
      );
    }
    

    【讨论】:

    • 感谢您的回复。我已经尝试过了,但仍然给出 TypeError: file is not iterable because the file type.
    • 我也对handleUpload进行了更改,只需检查该功能
    • 非常感谢!对不起我之前的回复。我忘了我把 setFile(null) 放在了我的 useEffect 中。所以它一开始没有用。谢谢你的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2021-07-31
    相关资源
    最近更新 更多