reactjs - 在firebase中添加一个集合文档长度的计数器
问题描述
我正在开发一个电子商务,我在前端使用 react,在后端使用 firebase/firestore。我设法添加/删除产品,并将它们存储在属于每个用户的集合中。我想要做的是在导航栏和其他组件中有一个计数器,它指示登录用户在购物篮中的文档(产品)数量,但由于范围,我无法做到.
在 products.js 中
const addToBasket = () => {
db.collection('users').doc(user?.uid).collection('basket').add({productId: id, title: title,
cont: content, img: image, price: price})
}
在 checkoutProduct.js 中
const removeFromBasket = () => {
firestore().collection('users').doc(user?.uid).collection('basket').doc(id.toString()).delete();
}
在 checkout.js 中
useEffect(() => {
if(user){
firestore().collection('users').doc(user?.uid).collection('basket').get().then(snapshot => {
setProducts(snapshot.docs.map((doc) => {return {...doc.data(), id: doc.id} }))
})
}
}, [])
解决方案
这是需要在前端处理的常见事情。一种解决方案是将信息存储在上下文中。
https://reactjs.org/docs/hooks-reference.html#usecontext
从概念上讲,您可以做的一件事是在成功写入数据库时更新该上下文,在您的情况下为 Firestore。
因此,通过这种方式,您可以在后端更新时更新前端。这可以通过快照上的观察者来完成。
阅读:https ://firebase.google.com/docs/firestore/query-data/listen
推荐阅读
- javascript - 如何在反应中使用路由器在具有键值对的组件之间切换
- php - Laravel 8:如何使隐式模型绑定路由参数可选而不是抛出 404?
- node.js - 是否有任何类似于 c# 上的 Environment.TickCount 的 NodeJs 类/函数?
- javascript - 我似乎找不到错误
- laravel - 我的网站不输出 laravel 页面...我该怎么办?
- php - 我想从表 sql 中获取数据
- ckeditor - this.props.editor.create 不是 CKEditor 中的函数 - NextJS
- android - 海量数据解包时如何减少Message Pack库的解析时间
- javascript - Discord JS:我想在机器人所在的每个公会中向名为“general”的频道发送嵌入信息,但出现错误
- html - 将属性添加到 css