【发布时间】:2020-10-19 17:07:56
【问题描述】:
我实现了以下内容来显示分页查询(这是 Tony O'Hagan 在这篇文章中建议的:How to get the last document from a VueFire query):
bindUsers: firestoreAction(({ bindFirestoreRef }) => {
return bindFirestoreRef('users',
Firebase.firestore().collection('users').limit(8), { serialize })
}),
bindMoreUsers: firestoreAction(context => {
return context.bindFirestoreRef('users', Firebase.firestore().collection('users').startAfter(context.state.users[context.state.users.length - 1]._doc).limit(8), { serialize })
})
当用户滚动到页面末尾时,我调用 bindMoreUsers 将 state.users 更新为下一组 8 个文档。我需要能够附加到 state.users 而不是覆盖原始的 8 个文档集。我该怎么做?
【问题讨论】:
-
嗨@ak22 - 您需要实时更新吗?如果你是那么你可能最好的选择是使用
startAt你的第一个查询的文档,而不是做一个硬编码的limit(8)做一个带有偏移量的限制,比如limit(users.length + offset)这样你保持您现有的用户列出并添加额外的offset数量,在您的情况下为8。如果您不需要实时,那么只需列出数组并保留您的doc.id以保存任何 UI 编辑更新以保存回 Firestore。 -
谢谢。我会试试这个,让你知道。
-
所以,这基本上是绑定前 8 个文档,然后是 16 个,然后是 24 个,依此类推。那么,这不是累积了 8+16+24 次读取吗?
-
嗨@ak22 - 它会产生额外的读取。您可以使用一些分析来帮助您决定这是否最适合您。例如,对 24 个项目进行初始读取,但只显示 8 个,然后通过跟踪用户对更多项目的消费情况,将分析与用户的行为相关联。如果有更多分页的重要用途,则权衡 UX/UI 的影响,以便最初列出更多结果以减少读取。
-
好的,谢谢。奇怪的是,没有好的解决方案。似乎是一个常见的用例,对吧?假设您要滚动浏览成员列表。现在我想起来了,我认为不需要实时更新,因为我只显示成员名称、位置和其他一些不太可能发生太大变化的统计项目。因此,我可以直接查询而不是在商店中绑定查询。感谢您的回复。
标签: javascript vue.js vuex vuexfire