首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React js react-dropzone删除文件

React js react-dropzone删除文件
EN

Stack Overflow用户
提问于 2020-05-26 18:27:26
回答 1查看 2.5K关注 0票数 1

链接:codesandbox

我必须确保上传一个文件,但我希望在出现错误的情况下能够删除它,以便上传另一个文件。

因此,单击X应该允许您清空要加载的文件,但我不会成功。

你能给我一些建议吗?

代码:

代码语言:javascript
复制
import React from "react";
import ReactDOM from "react-dom";
import { useDropzone } from "react-dropzone";
import { AttachFile } from "@material-ui/icons";
import Chip from "@material-ui/core/Chip";

function Dropzone({ onDrop, onDelete }) {
  const { acceptedFiles, getRootProps, getInputProps } = useDropzone({
    onDrop
  });
  let file = acceptedFiles[0];
  const label = file ? `${file.path} - ${file.size} bytes` : "DRAG_FILE";
  console.log("Dropzone", file);
  return (
    <div>
      <div {...getRootProps({ className: "drop-zone2" })}>
        <input {...getInputProps()} multiple={false} />
        <Chip
          icon={<AttachFile />}
          label={label}
          color="primary"
          onDelete={
            file
              ? () => {
                  file = [];
                  onDelete();
                }
              : false
          }
        />
      </div>
    </div>
  );
}

function App() {
  const [state, setState] = React.useState({
    fileName: "",
    fileUpload: undefined
  });
  const onDrop = file => {
    const reader = new FileReader();
    reader.onabort = () => console.log("File reading was aborted.");
    reader.onerror = () => console.log("File reading has failed.");
    reader.onload = () => {
      setState(prev => ({
        ...prev,
        fileName: file[0].name,
        fileUpload: file[0]
      }));
    };
    reader.readAsArrayBuffer(file[0]);
  };

  return (
    <>
      <Dropzone
        onDrop={onDrop}
        multiple={false}
        onDelete={() => {
          setState(prev => ({
            ...prev,
            fileName: "",
            fileUpload: ""
          }));
        }}
      />
    </>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
EN

回答 1

Stack Overflow用户

发布于 2020-10-16 19:04:29

我希望这段代码能正常工作:

代码语言:javascript
复制
import React, { useState, useEffect, useCallback } from 'react'
import { useDropzone } from 'react-dropzone'

const CreateFileUpload = () => {
  const onDrop = useCallback(acceptedFiles => {
    // Do something with the files
  }, [])
  const { getRootProps, getInputProps, isDragActive, acceptedFiles } = useDropzone({ onDrop, accept: '.png, .jpeg' })
  const files = acceptedFiles.map((file, i) => (
    <li key={file.path} className="selected-file-item">
      {file.path}  <i className="fa fa-trash text-red" onClick={() => remove(i)}></i>
    </li>
  ));
  const remove = file => {
    const newFiles = [...files];     // make a var for the new array
    acceptedFiles.splice(file, 1);        // remove the file from the array
  };
  return (
    <div>
      <div {...getRootProps()} className="dropzone-main">
        <div
          className="ntc-start-files-dropzone"
          aria-disabled="false"
        >
        </div>
        <button className="add-button" type="button">
          <i className="fa fa-plus"></i>
        </button>
        <h3 className="upload-title">
          <span></span>
        </h3>
        <input
          type="file"
          multiple=""
          autocomplete="off"
          className="inp-file"
          // onChange={uploadFile}
          multiple
          {...getInputProps()}
        />
        {isDragActive ?
          <div></div>
          :
          <div>
            <p>  Upload files  </p>
          </div>
        }
      </div>
      <aside>
        {files.length > 0 ? <h5>Selected Files</h5> : <h5></h5>}
        <ul>{files}</ul>
      </aside>
    </div>
  )
}
export default CreateFileUpload

谢谢你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62020004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档