如何从 firebase 存储下载图像并将它们作为 prop 分配给 React 中的文档?
How can I download images from firebase storage and assign them as a prop to doc in React?
我正在开发一个带有 Firestore 数据库的 React Web 应用程序,并尝试使用 StorageRef 和 getDownloadURL() 从 Firebase 存储中下载多个图像。我想将图像 URL 作为 prop 分配给文档,但它不起作用。
有谁知道我做错了什么?
function useDishes() {
const [dishes, setDishes] = useState([])
useEffect(() => {
firebase
.firestore()
.collection('dishes')
.onSnapshot(snapshot => {
const storage = firebase.storage()
const storageRef = storage.ref()
const newDish = snapshot.docs.map(doc => ({
id: doc.id,
...doc.data(),
getDownloadURLs: storageRef
.child(doc.data().imageString)
.getDownloadURL()
.then(url => {
console.log(url)
console.log(doc.data())
//assign url as prop to doc
return url
}),
}))
setDishes(newDish)
})
}, [])
return dishes
}
由于 getDownloadURL
也是一个异步调用,您需要在其回调中调用 setDishes
。
firebase
.firestore()
.collection('dishes')
.onSnapshot(snapshot => {
const storage = firebase.storage()
const storageRef = storage.ref()
const promises = snapshot.docs.map(doc => storageRef.child(doc.data().imageString).getDownloadURL());
Promise.all(promises).then(downloadURLs => {
const newDish = snapshot.docs.map((doc, index) => ({
id: doc.id,
...doc.data(),
getDownloadURLs: downloadURLs[index]
}))
setDishes(newDish)
})
})
我正在开发一个带有 Firestore 数据库的 React Web 应用程序,并尝试使用 StorageRef 和 getDownloadURL() 从 Firebase 存储中下载多个图像。我想将图像 URL 作为 prop 分配给文档,但它不起作用。 有谁知道我做错了什么?
function useDishes() {
const [dishes, setDishes] = useState([])
useEffect(() => {
firebase
.firestore()
.collection('dishes')
.onSnapshot(snapshot => {
const storage = firebase.storage()
const storageRef = storage.ref()
const newDish = snapshot.docs.map(doc => ({
id: doc.id,
...doc.data(),
getDownloadURLs: storageRef
.child(doc.data().imageString)
.getDownloadURL()
.then(url => {
console.log(url)
console.log(doc.data())
//assign url as prop to doc
return url
}),
}))
setDishes(newDish)
})
}, [])
return dishes
}
由于 getDownloadURL
也是一个异步调用,您需要在其回调中调用 setDishes
。
firebase
.firestore()
.collection('dishes')
.onSnapshot(snapshot => {
const storage = firebase.storage()
const storageRef = storage.ref()
const promises = snapshot.docs.map(doc => storageRef.child(doc.data().imageString).getDownloadURL());
Promise.all(promises).then(downloadURLs => {
const newDish = snapshot.docs.map((doc, index) => ({
id: doc.id,
...doc.data(),
getDownloadURLs: downloadURLs[index]
}))
setDishes(newDish)
})
})