dropzone-ui:nový způsob poskytování stahování souborů přetažením v aplikacích React (část 1)

Úvod

Dropzone UI je kompletní sada reakčních komponent, která umožňuje vývojářům strávit méně času kódováním zóny drag and drop pro nahrávání souborů.

Ve standardním HTML5 můžete nahrávat soubory přes
. Navíc existují balíčky jako dropzone a reag-dropzone, které tento úkol zvládnou velmi dobře.
Nicméně, inspirováno v těch posledních, bylo vytvořeno něco nového a výkonnějšího:dropzone-ui.

Pomocí tohoto nového nástroje můžete snadno zobrazit náhledy a také omezit typy souborů, velikost a množství souborů. Kromě toho můžete změnit režim zobrazení, abyste viděli soubory jako vodorovný seznam nebo jako mřížku.

Jak jsem řekl dříve, režim zobrazení můžete změnit kliknutím na tlačítko nahoře vedle tlačítka „odebrat vše“:

Poslední ukázka je důležitá, protože můžete vidět také 2 vynikající funkce:

  • Informační vrstva
  • Stav souboru

Informační vrstva

Vrstva, která zobrazuje všechny relevantní informace o souboru, jako je název, typ a velikost.

Stav souboru

Stav souboru po ověření podle ověřovacích kritérií.

Chcete-li vytvořit Dropzone, která podporuje snímky obrazovky uvedené výše, potřebujete tento kód převzatý z 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>
  );
}


Náhled na celou obrazovku

Jednou z vlastností je, že v kombinaci s další komponentou nazvanou "FullScreenPreview" ze stejného balíčku můžete vidět náhled souboru na celou obrazovku.

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>
  );
}

A toto je výsledek po vypuštění souborů a kliknutí na view tlačítko na požadované položce souboru:

Lokalizace

V neposlední řadě je uživatelské rozhraní dropzone dostupné ve španělštině prostřednictvím localization podpěra:

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>
  );
}

Závěr

Závěrem lze říci, že se jedná o úžasnou knihovnu pro drag and drop soubory s náhledy obrázků. Tento příspěvek nemůže ukázat úplný potenciál dropzone-ui, ale byl poskytnut obecný přehled. Ve skutečnosti jsou zde informace dostačující k tomu, abyste mohli začít s jeho úžasným nástrojem. Více informací naleznete v dokumentaci https://www.npmjs.com/package/dropzone-ui. V dalších příspěvcích ukážu tento balíček podrobně.