【发布时间】:2020-08-19 10:15:49
【问题描述】:
您好,我正在尝试将多个图像文件 base64 保存到数组中的状态中。
const uploadImage = e => {
if (e.target.files && e.target.files.length > 0) {
// ...
let imagesArray = [];
for (let i = 0; i < e.target.files.length; i++) {
const image = e.target.files[i];
const verified = verifyImage(image);
if (verified) {
const reader = new FileReader();
const type = image.type;
reader.addEventListener('load', () => {
let imgObj = {
base64: reader.result,
name: image.name,
type,
size: image.size,
};
imagesArray.push(imgObj)
});
reader.readAsDataURL(image);
}
}
setImages(imagesArray);
}
e.target.value = null;
}
更新状态后,它不会在地图功能中呈现
{
images.length > 0
? images.map((imageObj, i) => {
return (
<div key={i}>
<img
src={imageObj.base64}
alt=''
/>
<div>
<span>{imageObj.size ? imageObj.size : '-'}</span>
<span>{imageObj.name ? imageObj.name : '-'}</span>
<span
onClick={() => removeImage(i)}
>
{translations(locale).remove}
</span>
</div>
</div>
)
})
: null
}
状态数组已更新,但 array.length 仍显示为 0。我做错了什么?
【问题讨论】:
-
这可能是由于反应的状态更新批处理造成的。尝试对 setImages() 使用回调函数方法。即 setImages(prevImage => {/*将整个 if 条件放在回调函数的末尾,返回 imagesArray*/})。
标签: javascript reactjs filereader