【发布时间】:2020-02-27 01:00:04
【问题描述】:
伙计们!
在进行for-loop 的每次迭代时我遇到了一个问题,我的数组变量在状态下仍然是 1 个元素。这是我的输入<input accept="image/*" type="file" onChange={handlePhotoChange} multiple/>
这就是handlePhotoChange 方法
const [images, setImages] = useState([])
const handlePhotoChange = async (event) => {
const { files } = event.target;
for (let i = 0; i < files.length; i += 1) {
const file = files[i];
if (!file.type.match('image')) {
continue;
}
setImages([...images, { loading: true, src: null }]);
await firebase.doUploadImage(file, auth.uid);
const url = await firebase.getImageUrl(file.name, auth.uid);
setImages([...images.slice(0, -1), { loading: false, src: url }]);
}
}
我在这里所做的是在将图像上传到 Firebase 存储之前将加载变量设置为 true,并通过 loading 我显示一个加载器。然后我的上传准备好了,我得到了图像的 firebase url 并覆盖了数组 images[] 中的最后一个元素。然后我们继续下一张图片。这样,我将在每个图像上显示一个加载器。但问题是循环后的images 数组只有最后添加的元素。我想这与 setImages 函数有关,它是异步的,但正在等待您的意见。谢谢你:)
【问题讨论】:
-
您误解了
useState的工作原理,images将始终具有与循环启动时相同的值。
标签: javascript reactjs firebase firebase-realtime-database firebase-storage