javascript - React + Firestore 读取数据无限结果
问题描述
我正在尝试使用 React JS 从 Firestore 中的集合中获取所有文档。最初我有这个直接来自 Firebase 文档的代码:
db.collection("articles").get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
console.log(doc.id, " => ", doc.data());
});
});
当我在控制台中记录它时,它会打印每个文档两次。另外,当我将代码更改为此:
const [headlines, setHeadlines] = useState([])
db.collection("articles").get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
setHeadlines(prevHeadlines => [...prevHeadlines, doc.data().article1])
});
});
当我记录数组标题的长度时,它似乎在无限增加,它没有停止并继续前进。数据库中只有 14 个文档,因此数组中不可能有那么多元素。我是 React JS 的新手,任何帮助将不胜感激。
解决方案
此代码在哪里,尤其是该 db.collection()
部分?
如果它useEffect()
不在挂钩中,它将在每次组件渲染时运行。由于它会改变状态(setHeadlines
),因此每次db.collection()...
运行时都会改变状态;每次它改变状态时都会重新渲染,所以......
既然你写了它,setHeadlines(`prevHeadlines => [...prevHeadlines, doc.data().article1])
它就会永远添加collection().get()
到以前的标题中。
推荐阅读
- typescript - 从一个 Cloud Firestore 文档中获取一个字段以指定在另一个 Cloud Function 中侦听更改(或写入)的位置
- c# - 我如何在 Unity for android 中操纵立方体
- visual-studio - 使用 Azure DevOps 从多项目 .NET 解决方案部署单个项目时 CICD 管道构建出错
- javascript - 对 SpringBoot 控制器的 AJAX 调用导致 CORS 错误
- php - 文件存储在我的 Laravel 项目中不起作用
- google-sheets - 谷歌表格查询语句
- c# - HttpClient 静态与新
- java - Dialog里面的RecyclerView被截断底部
- ios - 在 iOS swift 中将 localizable.string 文件转换为 JSON
- c# - 创建数据服务以在 c# api 和前端(角度)之间进行通信