LoginSignup
0
1

JavaScript(React)で複数ファイルアップロードの読込待ち

Posted at

JavaScript (React) の複数ファイルアップロードしたときのファイル表示にちょっとはまったので備忘録でメモ
やったこととしては FileReaderonload のところを Promise を待つようにしてる
あとはファイルインプットの onChange で使う関数も async つけてファイル読込処理を待つようにする
map で処理すると待つのにもう一つ関数を作る必要があるので煩雑になりそうなので for of でループ処理してます

import { useState } from 'react';

const App = () => {
  const [selectImags, setSelectFiles] = useState([]);
  
  // ファイル選択時の処理 async つける
  const change = async (e) => {
    const imags = [];
    // 選択したファイルごとに読込処理 await で待つ
    for (const file of e.target.files) imags.push(await fileRead(file));
    setSelectFiles([...selectImags, ...imags]);
  };

  // ファイル読込処理 async つける
  const fileRead = async (file) => {
    const fileReader = new FileReader();
    fileReader.readAsDataURL(file);
    // await Promise でファイル読込が終わるまで待つ
    await new Promise((resolve) => (fileReader.onload = () => resolve()));
    return fileReader.result;
  };

  return (
    <>
      <p>ファイル選択</p>
      <input type="file" multiple onChange={change} />
      <p>選択したファイル</p>
      {selectImags.map((src, i) => {
        return <img key={'image' + i} src={src} alt={'image' + i} />;
      })}
    </>
  );
};
export default App;

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1