const [images, setImages] = useState([]) const upload = async () => { setIsSending(true) const list = [] await Promise.all(previewImages.map(async image => { const uploadRef = firebase.storage().ref('images').child(image.id) const uploadTask = uploadRef.put(image.blob) const snapshot = await uploadTask const url = await snapshot.ref.getDownloadURL() const n ={ id: image.id, path: url } list.push(n) })) console.log(list) //きちんと値が挿入されている setImages(list) console.log(images) //空の配列になる await firebase.firestore().collection('posts').add({ //images: images, (この場合、空の配列としてfirebaseに保存される) images: list //きちんと想定した値が挿入される }) setPreviewImages([]) setImages([]) setIsSending(false)
React + firebase で、このような画像を複数firebase上に保存する処理があります。
listという空の配列を作成し、ループの中でlistに画像情報を挿入していき、最終的にはlistをfirebaseに保存する際の値としてそのまま渡しています。(この実装ではうまくいく)
本来、imagesというstateを用意しているのですが、setImages(list)をしても、imagesに値を挿入することはできません。
この場合、stateを利用せずに、関数内で配列を作成してその配列をfirebaseの値として使うということは、正しい実装方法なのでしょうか。
それとも、setImagesにきちんと値を反映させて、images: imagesとするべきなのでしょうか。
ご教授お願いいたします。
あなたの回答
tips
プレビュー