【问题标题】:Firebase: fetch existing data once, then use child_added to get new dataFirebase:获取现有数据一次,然后使用 child_added 获取新数据
【发布时间】:2018-02-08 02:50:48
【问题描述】:

我想只获取一次列表,然后将其保存在内存中并使用 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 中忽略它们?或者有没有办法只获得新的更新?

谢谢

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

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

    如果您的数据不能帮助您像这样为项目创建基于时间的自然排序,或者您已经用尽了允许的 RTDB 查询过滤器,我认为您无能为力(除了可能迁移到 Firestore,它会为您提供多个过滤器)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2018-10-29
      相关资源
      最近更新 更多