我想只获取一次列表然后将其存储在内存中并使用child_added处理正在创建的项目。
仅使用my-component.vue
对我来说不方便,因为这样做会导致我为每个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
}
})
中忽略它们?或者有没有办法只获得新的更新?
由于
答案 0 :(得分:1)
如果您介绍了在任何给定时间点准确确定哪些项目为“新”的方法,您可以在“child_added”查询中使用该方法来选择“值”查询中断的位置。例如,如果您的数据项具有与每个项目相关联的时间戳,并且您知道从“值”查询收到的所有项目的最新时间戳,请修改“child_added”查询以仅筛选项目> =该时间戳
如果您的数据无法帮助您创建像这样的项目的自然时间顺序排序,或者您已经用尽了RTDB查询的一个允许过滤器,我认为您还可以做其他事情。 (除了可能移动到Firestore,它会为您提供多个过滤器)。