大佬教程收集整理的这篇文章主要介绍了意外的 Firestore 集合快照 docChanges() 行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我为 firebase 集合设置了一个监听器,如下所示:
useEffect(() => {
let data:IFirebaseProject[] = [];
//console.log(data);
console.log('SUBSCRIbed');
const unsubscribe = firebase
.firestore()
.collection("projects")
.onSnapshot((snapshot) => {
let changes = snapshot.docChanges();
console.log(changes); // LOG 1
changes.forEach(change => {
if (change.type === "added") {
data.push({
ID: change.doc.ID,...change.doc.data()
} as IFirebaseProject);
console.log('ADDED',{...change.doc.data()}); // LOG 2
} else if (change.type === "removed") {
const removeIndex = data.map(function(project) { return project.ID; }).indexOf(change.doc.ID);
data.splice(removeIndex,1)
console.log('REMOVED')
}
});
setProjects([...data]);
console.log('projects set');
});
当我删除一条记录时,console.log('REMOVED')
会出现一次,正如预期的那样。
但是当我添加一条记录时,console.log('ADDED',{...change.doc.data()});
出现在添加的记录中,然后与添加之前的记录一样多。
因此,例如,如果我得到两条记录,并添加第三条记录,我将获得以下日志序列:
我希望只添加一项更改和一项记录,而不是与记录一样多的更改。之前未添加的记录不会添加到数据库中,而是被视为快照中添加的更改并因此合并到状态中。
我尝试了两种方法将我的组件链接到 firestore,使用 redux 和使用 react 钩子,行为是相同的,但是这对我来说是出乎意料的,因为对于更大的数据库似乎不是很有效,我希望以某种方式查询当前数据库状态。
这是正常行为还是在添加记录并且我的代码有问题时应该只进行一次更改?
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的意外的 Firestore 集合快照 docChanges() 行为全部内容,希望文章能够帮你解决意外的 Firestore 集合快照 docChanges() 行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。