2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
如果我正確理解您的問(wèn)題,那么像這樣的解決方案可以工作:
const [images, setImages] = useState([]);
const handlePhotoChange = async (event) => {
const { files } = event.target;
setImages([...images, { loading: true, src: null }]);
let newImagesArray = [];
for (let i = 0; i < files.length; i += 1) {
const file = files[i];
if (!file.type.match('image')) {
continue;
}
await firebase.doUploadImage(file, auth.uid);
const url = await firebase.getImageUrl(file.name, auth.uid);
let obj = {loading: false, src: url};
newImagesArray.push(obj);
}
//get state
let newImages = images;
//add new images
newImages.push(newImagesArray)
//update state
setImages(newImages);
}
我們正在做的是創(chuàng)建一個(gè)臨時(shí)數(shù)組newImages來(lái)保存所有新文件。然后一旦我們遍歷所有上傳的文件,我們將數(shù)組放入狀態(tài)。
讓我知道它是否有效/是否有問(wèn)題。

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
它是異步的,只需更改一次狀態(tài)。另外如果你想訪問(wèn)以前的狀態(tài),你應(yīng)該使用 useState 的回調(diào)版本
const [stateObject, setObjectState] = useState({
firstKey: '',
secondKey: '',
});
setObjectState((prevState) => ({
...prevState,
secondKey: 'value',
}));
您可以拆分加載狀態(tài)和上傳狀態(tài)以使其更易于管理,偽代碼如下
const handlePhotoChange = (event) => {
const { files } = event.target;
const loadingImages = [];
for (let i = 0; i < files.length; i += 1) {
const file = files[i];
if (!file.type.match('image')) {
continue;
}
loadingImages.push({ file });
firebase.doUploadImage(file, auth.uid)
.then(// add to uploaded images state)
}
// set loading images state after iteration is complete
}
添加回答
舉報(bào)