发布于 2026-01-06 0 阅读
0

dropzone-ui:在 React 应用中提供拖放文件上传的新方式(第一部分)简介

dropzone-ui:在 React 应用中提供拖放文件上传的新方式(第 1 部分)

介绍

介绍

Dropzone UI是一套完整的 React 组件,它可以让开发者减少编写文件上传拖放区域代码的时间。


在标准的 HTML5 中,您可以通过`<input type="file"> ` 元素进行文件上传。此外,还有像dropzonereact-dropzone这样的包可以很好地处理这项任务。
然而,受后者的启发,人们创建了一个功能更强大、更新的工具:dropzone-ui

dropzone-ui-ondrag-sample

借助这款新工具,您可以轻松显示预览,还可以限制文件类型、文件大小和文件数量。此外,您还可以更改视图模式,以水平列表或网格形式查看文件。

dropzone-ui-ondrop-grid

正如我之前所说,您可以通过点击顶部“全部移除”按钮旁边的按钮来更改视图模式:

dropzone-ui-ondrop-list

最后一个示例很重要,因为您还可以从中看到两个出色的功能:

  • 信息层
  • 文件状态

信息层

该图层显示有关文件的所有相关信息,例如名称、类型和大小。

文件状态

文件根据验证标准验证后的状态。

要创建一个支持上述屏幕截图的 Dropzone,您只需要以下这段来自 CodesandBox 的代码:
编辑按钮


import { Dropzone, FileItem, FullScreenPreview } from "dropzone-ui";
import { useState } from "react";
export default function App() {
  const [files, setFiles] = useState([]);
  const [imageSrc, setImageSrc] = useState(undefined);
  const updateFiles = (incommingFiles) => {
    console.log("incomming files", incommingFiles);
    setFiles(incommingFiles);
  };
  const onDelete = (id) => {
    setFiles(files.filter((x) => x.id !== id));
  };
  const handleSee = (imageSource) => {
    setImageSrc(imageSource);
  };
  return (
    <Dropzone
      onChange={updateFiles}
      value={files}
      maxFiles={10}
      maxFileSize={2998000}
    >
      {files.map((file) => (
        <FileItem
          {...file}
          onDelete={onDelete}
          onSee={handleSee}
          preview
          info
          hd
        />
      ))}

    </Dropzone>
  );
}


Enter fullscreen mode Exit fullscreen mode

全屏预览

一个杀手级功能是,结合同一软件包中的另一个名为“FullScreenPreview”的组件,您可以查看文件的全屏图像预览。

import { Dropzone, FileItem, FullScreenPreview } from "dropzone-ui";
import { useState } from "react";
export default function App() {
  const [files, setFiles] = useState([]);
  const [imageSrc, setImageSrc] = useState(undefined);
  const updateFiles = (incommingFiles) => {
    console.log("incomming files", incommingFiles);
    setFiles(incommingFiles);
  };
  const onDelete = (id) => {
    setFiles(files.filter((x) => x.id !== id));
  };
  const handleSee = (imageSource) => {
    setImageSrc(imageSource);
  };
  return (
    <Dropzone
      onChange={updateFiles}
      value={files}
      maxFiles={10}
      maxFileSize={2998000}
    >
      {files.map((file) => (
        <FileItem
          {...file}
          onDelete={onDelete}
          onSee={handleSee}
          preview
          info
          hd
        />
      ))}
      <FullScreenPreview
        imgSource={imageSrc}
        openImage={imageSrc}
        onClose={(e) => handleSee(undefined)}
      />
    </Dropzone>
  );
}

Enter fullscreen mode Exit fullscreen mode

这是拖放文件并点击view所需文件项上的按钮后的结果:

ironman-fullscreen-dropzone-ui

本土化

最后,dropzone ui 还支持西班牙语,可通过以下localization属性实现:

import { Dropzone, FileItem, FullScreenPreview } from "dropzone-ui";
import { useState } from "react";
export default function App() {
  const [files, setFiles] = useState([]);
  const [imageSrc, setImageSrc] = useState(undefined);
  const updateFiles = (incommingFiles) => {
    console.log("incomming files", incommingFiles);
    setFiles(incommingFiles);
  };
  const onDelete = (id) => {
    setFiles(files.filter((x) => x.id !== id));
  };
  const handleSee = (imageSource) => {
    setImageSrc(imageSource);
  };
  return (
    <Dropzone
      onChange={updateFiles}
      value={files}
      maxFiles={10}
      maxFileSize={2998000}
      localization={"ES-es"}
    >
      {files.map((file) => (
        <FileItem
          {...file}
          onDelete={onDelete}
          onSee={handleSee}
          localization={"ES-es"}
          preview
          info
          hd
        />
      ))}
      <FullScreenPreview
        imgSource={imageSrc}
        openImage={imageSrc}
        onClose={(e) => handleSee(undefined)}
      />
    </Dropzone>
  );
}
Enter fullscreen mode Exit fullscreen mode

dropzone-ui-spanish

结论

总之, dropzone-ui是一个非常棒的拖放文件库,支持图像预览。本文无法展现 dropzone-ui 的全部潜力,但提供了一个概览。事实上,这里的信息足以让你开始使用这个强大的工具进行开发。你可以在文档中找到更多信息:https://www.npmjs.com/package/dropzone-ui。在接下来的文章中,我将深入介绍这个库。

文章来源:https://dev.to/jinssj3/dropzone-ui-the-new-way-of-providing-drag-and-drop-file-uploads-in-react-app-5djd