为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase onSnapshot 仅返回更改的项目

Firebase onSnapshot 仅返回更改的项目

哔哔one 2023-03-03 16:05:19
这是我关于 stackoverflow 的第一篇文章,我正在寻找一些帮助,因为我已经为此挠头了一段时间。我目前正在使用 Firebase 开发 Web 应用程序,并且正在使用该onSnapshot方法。目前,我正在从我的 db UI返回用户列表 。以下是我填充 UI 的函数。db.collectionGroup('items').where("userid", "==", user.id).orderBy('date', "desc").limit(80).onSnapshot(snapshot => { snapshot.docChanges().forEach(change => {    if (change.type === 'added') {       setupLedger(snapshot.docs, doc.id)    }        if (change.type === 'modified') {       setupLedger(snapshot.docs, doc.id)    }     if (change.type === 'removed') {       deleteLedger(user, doc.id);    } });});在页面加载时,我使用type: "added" (请参阅此)获取所有必要的数据当我单击EDIT(即修改)时出现我的问题,它仅返回修改后的条目并更新修改后的条目(请参阅此)。但是,如果我单击EDIT另一个字段,它将显示上一个条目,而不是当前条目(请参见 this)。我怎样才能改变我的方法,以便我可以获得所有条目,包括修改后的条目?本质上,我只想更新当前项目,一旦更新,我想返回数组(带有修改后的项目)。(旁注:如果我刷新页面,数组将返回修改后的项目,一切都按预期进行。)
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

受查询影响的所有文档(无论是否修改)都可以通过访问,snapshot.docs而有关已更改文档的额外信息可以通过访问snapshot.docChanges()。因此,考虑将您的代码更改为如下内容:


db.collectionGroup('items').where("userid", "==", user.id).orderBy('date', "desc").limit(80).onSnapshot(snapshot => {


  snapshot.docs.forEach(doc => {

    ...

  }

}


查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号