reactjs - 在 React 中从 Firebase 请求多个数据的最佳方法是什么
问题描述
我想知道在异步函数中从 Firebase 获取多个数据以等待来自第一个请求的一些数据的最佳方法是什么。我现在正在使用此代码,但它不可靠,有时会中断说它无法获取第二次调用的数据,因为它是undefined
.
function useOccasion() {
const [occasionData, setOccasionData] = useState(null)
const [friend, setFriend] = useState(null)
let { occasion } = useParams()
useEffect(() => {
const unsubscribe = firestore.collection('occasions').doc(occasion)
.onSnapshot(async eventData => {
setOccasionData({id: eventData.id, ...eventData.data()})
let friendData = await firestore.collection("friends").doc(eventData.data().friend).get();
setFriend({id: friendData.id, ...friendData.data()});
})
return () => unsubscribe()
}, [occasion])
return [occasionData, friend]
}
如果有更强大的方法来实现这一点,那就太棒了。
解决方案
我建议将您的数据提取分成两个钩子,一个用于每个收集场合和朋友。
我不确定您是如何设置 firebase 的,但我通过上下文访问它。
例如
const useOccasion = () => {
const firebase = useContext(FirebaseContext)
const [occasions, setOccasions] = useState([])
const [loading, setLoading] = useState(true)
useEffect(() => {
const unsubscribe = firebase.db.collection('occasions')
.onSnapshot(snapshot => {
if (snapshot.size) {
let occasionList = []
snapshot.forEach(doc =>
occasionList.push({ ...doc.data(), uid: doc.id }),
)
setOccasions(occasionList)
setLoading(false)
} else {
setOccasions([])
setLoading(false)
}
})
return () => {
unsubscribe()
}
}, [])
return { occasions, loading }
}
最后,在您需要数据的组件中,您可以访问此挂钩:
const { occasions, loading } = useOccasion()
推荐阅读
- python - Python 上的打印函数
- javascript - 如果模态数未知,多个模态将不会关闭
- javascript - 如何暂时将 +1 添加到 div 直到它刷新,并在第二次单击时减去 1(等等)?
- sql - 求和分析函数或任何其他简单方法
- powershell - 比较两个 CSV,匹配 2 个或更多列上的列,使用 powershell 从两个 csv 导出特定列
- ajax - 如何对我的 Github 存储库中的 JSON 文件进行 AJAX 调用
- python - Python检查数字是否已经在列表中,该列表是字典中的一个值,是否重新生成直到它不同 - 语法错误
- bash - 如何在 shell 脚本中对 2 列进行排序?
- javascript - 如何从上传到 api asp.net 的 multipart/form-data 音频文件中检索元数据
- dart - 无法删除添加的列表元素