javascript - Firebase:获取现有数据一次,然后使用child_added获取新数据

标签 javascript firebase firebase-realtime-database

我只想获取一个列表一次,然后将其保存在内存中并使用 child_added 来处理正在创建的项目。

仅使用 child_added 对我来说很不方便,因为这样做会导致我为每个 child_added 事件重新渲染整个列表。我宁愿在页面加载时渲染整个列表,然后再渲染每个添加的项目。

我的代码:

ref.once('value', (snapshot) => {
    let messages = []
    snapshot.forEach(function(childSnapshot) {
      let messageKey = childSnapshot.key
      let message = childSnapshot.val()
      messages.push(message)
    })
    // Render messages list once

    ref.on('child_added', (message) => {
      const messageVal = message.val()
      // Append message and re-render list
    }
})

问题是我仍然收到每个现有节点的 child_added 事件。

最明智的做法是跟踪我已经处理的项目并在 child_added 中忽略它们吗?或者有没有办法只获取新的更新?

谢谢

最佳答案

如果您引入了一种方法来准确确定在任何给定时间点哪些项目是"new"的,则可以在“child_added”查询中使用该方法来继续“value”查询停止的位置。例如,如果您的数据项具有与每个项目关联的时间戳,并且您知道从“value”查询收到的所有项目的最新时间戳,请修改“child_added”查询以仅筛选 >= 该时间戳的项目。

如果您的数据不能帮助您创建像这样的基于时间的自然排序,或者您已经用尽了 RTDB 查询允许的过滤器,我认为您没有什么其他可以做的(除了可能转移到 Firestore,它为您提供多个过滤器)。

关于javascript - Firebase:获取现有数据一次,然后使用child_added获取新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48671081/

相关文章:

java - 如何在我的编码 android studio 项目中实现此代码 setDisplayName?

javascript - setState 不是一个函数

javascript - 来自 Javascript 的简单 REST 调用

javascript - 如何在 Typescript 中更新数组列表的对象?

javascript - Firefox 陷入无限循环并忽略 window.print() 上的 css

Android Firebase - 使用个人资料照片进行用户注册

javascript - 仅使用 javascript 且不使用 jquery 的 highcharts

java - 如何根据用户在文本字段中输入的电子邮件从 Firebase 数据库检索值?

javascript - 如何仅更新Google Firebase数据库中的一个属性

firebase - 了解 Firebase 数据库中的带宽使用情况来自何处