【React】react-dropzoneの使い方

react-dropzoneはローカルのファイルを選択したりドラッグ&ドロップするためのライブラリです。

インストール方法

npm install --save react-dropzone
or
yarn add react-dropzone

最低限の使い方

import { useDropzone } from "react-dropzone";

const Index = () => {
  const { getRootProps, getInputProps, acceptedFiles } = useDropzone({});

  console.log(acceptedFiles);

  return (
    <>
      <div {...getRootProps()}>
        <input {...getInputProps()} />
        <p>ここをクリックしてファイルを選択もしくはドラッグ&ドロップ</p>
      </div>
      <div>{acceptedFiles.map((acceptedFile) => acceptedFile.name)}</div>
    </>
  );
};

export default Index;

もう少し実用的にしてみます

import { useDropzone } from "react-dropzone";
import type { FileRejection } from "react-dropzone";

const Index = () => {
  const { getRootProps, getInputProps, acceptedFiles, fileRejections } =
    useDropzone({
      maxSize: 10240,
      accept: { "text/markdown": [] },
      multiple: false,
      validator: (file) => {
        if (file.name?.length > 5) {
          return {
            code: "fileNameLength",
            message: "ファイル名は5文字以下にしてください",
          };
        }
        return null;
      },
      onDropRejected: (files: FileRejection[]) => {
        return;
      },
      onDropAccepted: (files: File[]) => {
        files.map((file) => console.log(file.type));
      },
    });

  return (
    <>
      <div {...getRootProps()}>
        <input {...getInputProps()} />
        <p>ここをクリックしてファイルを選択もしくはドラッグ&ドロップ</p>
      </div>
      {acceptedFiles.length > 0 && (
        <div>
          <p>AcceptedFile</p>
          {acceptedFiles.map((acceptedFile) => acceptedFile.name)}
        </div>
      )}
      {fileRejections.length > 0 && (
        <div>
          <p>RejectedFile</p>
          {fileRejections.map((fileRejection) => fileRejection.file.name)}
        </div>
      )}
      <div>
        {fileRejections.map((fileRejection) =>
          fileRejection.errors.map((error) => error.message)
        )}
      </div>
    </>
  );
};

export default Index;

コードの解説

maxSize:ドラッグ&ドロップできるファイルのファイルの最大サイズを指定

accept:ドラッグ&ドロップできるファイルのMIMEタイプを指定

multiple:複数ファイルをドラッグ&ドロップできるかの指定(デフォルトはtrue)

validator:ドラッグ&ドロップしたファイルに対して行うバリデーションチェックを指定。エラーとしたい場合はエラーオブジェクト(codeとmessage)を返し、エラーがない場合はnullを返す必要がある

onDropRejected:バリデーションチェックでエラーとなった場合、maxSizeで指定したファイルサイズを超えた場合、acceptで指定したMIMEタイプ以外のファイルをドラッグ&ドロップした場合に実行される

onDropAccepted:バリデーションチェックがエラーがなく、ファイルサイズ、MIMEタイプも問題ない場合に実行される

acceptedFilesにはバリデーションチェックやファイルサイズでエラーがなかった場合にドラッグ&ドロップしたファイル情報、fileRejectionsにはエラーがあった場合にファイル情報やエラーオブジェクトの配列が格納される

ると嬉しいです!

にほんブログ村 IT技術ブログへ

にほんブログ村