質問失礼致します。
困っていること
previousFilesで受け取ったURLをファイルをコンポーネントマウント時にファイルオブジェクトに変換して、stateを更新し、list表示させたいのですが、
state, oldFilesの更新がうまく行きません。添付した画像は,useEffect内でoldFilesをconsole.logしたものです。空配列かと思いきや、値はちゃんと入っているみたいなんですが、参照できないです。
いろいろと原因を探ってみましたが、まったく理解できないのでどなかヒントいただけると幸いです。
const FileUpload = React.memo(( { name, previousFiles, //ファイルのURLを要素にもつ配列 } ) => { const [oldFiles, setOldFiles] = useState([]); const oldFileCount = previousFiles && previousFiles.length > 0 ? previousFiles.length : 0; useEffect(() => { //URLからFileオブジェクトに変換 if (previousFiles && previousFiles.length > 0) { let filesArray = []; previousFiles.forEach((file, index) => { fetch(file) .then(response => response.blob()) .then(blob => { const str = file.split("/"); const fileName = str[str.length - 1]; const fileObj = new File([blob], fileName); fileObj.preview = URL.createObjectURL(fileObj); fileObj.path = fileName; filesArray[index] = fileObj }) }) setOldFiles(filesArray); //配列に格納したファイルオブジェクトをstateに } return () => { oldFiles.forEach(file => { URL.revokeObjectURL(file.preview) }) } }, [previousFiles]) useEffect(() => { console.log(oldFile) //上記のuseEffect内でstateを更新しても空配列が出力される ただ値は入っている } }, [oldFiles]) return ( //ファイルをリスト表示する ) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/13 15:50