reactjs - 显示存储 Firebase 中的图像 (React#)
问题描述
我可以从我的Storage
Firebase 中获取图像。
const [myImages, setMyImages] = useState();
useEffect(() => {
const storage = getStorage();
const listRef = ref(storage, 'somefolder');
const allImages = listAll(listRef).then((res) => {
res.items.forEach((itemRef) => {
getDownloadURL(ref(storage, `somefolder/${itemRef.name}`)).then((img) =>{
console.log(img) //link to image
setMyImages(img)
}).catch(err => {
console.log('error getting images ', err);
})
})
}).catch((error) => {
console.log('error getting all files ', error);
});
}, []);
img
- 它链接到特定(一个)图像。现在我想将它保存到setMyImages
然后在现场渲染:
return (
<>
{myImages.map((oneImg) => (
<img src={oneImg.img} />
))}
</>
)
但有些不对劲map
更新
const [myImages, setMyImages] = useState([]);
setMyImages(...img)
解决方案
以下代码为您工作。由于异步请求,我已经用 for-in lopp 替换了 forEach 循环。我在循环之前创建了一个数组,并从循环中将图像推入其中。
初始化所有内容后,我将使用新数组设置状态。就像你已经在做的那样在 JSX 中呈现
此外,如果您想在加载图像时显示图像,那么您可以这样做
const [myImages, setMyImages] = useState([]);
useEffect(() => {
const storage = getStorage();
const listRef = ref(storage, "somefolder");
listAll(listRef)
.then(async (res) => {
let imagesArray = [];
for (let i in res.items) {
const itemRef = res.items[i];
const img = await getDownloadURL(
ref(storage, `somefolder/${itemRef.name}`)
);
imagesArray.push(img);
}
setMyImages(imagesArray);
})
.catch((error) => {
console.log("error getting all files ", error);
});
}, []);
return (
<>
{myImages.map((oneImg) => (
<img src={oneImg.img} />
))}
</>
)
此外,如果您想在加载图像时显示图像,那么您可以这样做
const [myImages, setMyImages] = useState([]);
useEffect(() => {
const storage = getStorage();
const listRef = ref(storage, "somefolder");
listAll(listRef)
.then(async (res) => {
for (let i in res.items) {
const itemRef = res.items[i];
const img = await getDownloadURL(
ref(storage, `somefolder/${itemRef.name}`)
);
setMyImages([...myImages, img]);
}
})
.catch((error) => {
console.log("error getting all files ", error);
});
}, []);
推荐阅读
- hyperledger-fabric - 如何在应用前端配置 hyperledger composer 的多用户模式?
- javascript - 表格的每一行都有复选框。但是通过单击复选框,它没有选择该行文本值
- java - netty 服务器如何通过单个端口同时支持 Http 和 Https 协议?
- django - 单击时导航栏中的引导下拉菜单不显示下拉菜单
- java - 如果我关闭 PreparedStatement,数据库中的缓存会丢失吗?
- javascript - 如何让网页只显示一次?
- terraform - 使用 Terraform 在 AWS 上创建实例时出错
- html - 讲述人阅读空文档以获取纯文本信息模式弹出窗口
- android - 如何在视频全屏模式下隐藏嵌套屏幕中的 tabBar?
- javascript - Set focus on the second table