Firebase onSnapshot 仅返回更改的项目

这是我关于 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)。我怎样才能改变我的方法,以便我可以获得所有条目,包括修改后的条目?本质上,我只想更新当前项目,一旦更新,我想返回数组(带有修改后的项目)。

(旁注:如果我刷新页面,数组将返回修改后的项目,一切都按预期进行。)


哔哔one
浏览 103回答 1
1回答

慕娘9325324

受查询影响的所有文档(无论是否修改)都可以通过访问,snapshot.docs而有关已更改文档的额外信息可以通过访问snapshot.docChanges()。因此,考虑将您的代码更改为如下内容:db.collectionGroup('items').where("userid", "==", user.id).orderBy('date', "desc").limit(80).onSnapshot(snapshot => {  snapshot.docs.forEach(doc => {    ...  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript