javascript - 在firebase中的一些给定ID后获取更多数据
问题描述
我是使用 firebase 的新手,我想对我的帖子进行无限滚动分页。
假设我有这个帖子 IDS:
-M5HMGs3EnBv6O2NSxG
-M5HMGsA3YyW_NJ3fSV
-M5HMGsdfLOOEPPBR_s
-M5HMGsiH9HIZw9DNaz
-M5HMHFYoUX8kNolLrP
-M5HMHFZvDrV27S2hSt
-M5HMHFnrQ_l4mVQ0rX
-M5HMHFoaV8wbexwPCd
-M5HMJQaaFGxF450lJB
-M5HMJQe319R19Cvak6 // THE LAST ONE IN FIRST PAGINATION
-M5HMJQh2gWuah7GSht
-M5HMJQlrcfTTF3fbbI
-M5HMJQo6QT1HwWP2lz
-M5HMJQrIUiZyzhiqK3
-M5HMJQudSkFdvs42D1
-M5HMJRCmbFbxKp1NgA
-M5HMJRFwfo7yN8Is3-
-M5HMJRIsKT3YmoukQ0
-M5HMJRKDTq7XuqtshT
-M5HMJRNRabXbYQUMi6
-M5HMJRS1t9UBzH_3Jh
-M5HMJRXEv6BaPeQPMn
-M5HMJR_bRdxCBy-uma
-M5HMJRdOPBA-SMoMjB
所以,首先我得到前 10 个帖子,直到 idM5HMJQe319R19Cvak6
使用这个:
var starCountRef = firebase.database().ref('/posts/').limitToFirst(11);
没关系。当我转到最后一篇文章时,我的 reactjs 将再次调用此函数,在变量中发送最后加载的文章 ID(M5HMJQe319R19Cvak6)pageNumber
。
我想做的是在给出最后一个 id 之后获取帖子以继续分页,如下所示:
-M5HMJQh2gWuah7GSht
-M5HMJQlrcfTTF3fbbI
-M5HMJQo6QT1HwWP2lz
-M5HMJQrIUiZyzhiqK3
-M5HMJQudSkFdvs42D1
...
我尝试使用 startAt(ID) 但没有显示结果:
var starCountRef = firebase.database().ref('/posts/').limitToFirst(11).startAt(pageNumber);
任何想法如何在firebase中获得ID后获得帖子?
解决方案
Firebase 实时数据库查询包括两个步骤:
- 您调用其中一种
orderBy
方法来对特定值的子节点进行排序。 - 然后调用其中一种过滤方法 (
startAt
,endAt
,equalTo
) 来确定从哪里开始和停止返回数据。
您的代码执行了第二步,但未能执行第一步。这意味着您使用的是 Firebase 的默认排序顺序,即每个节点的优先级。优先级是那个时候遗留下来的,然后这个 API 没有更好的排序选项。这些天来,您总是想orderBy...
在过滤之前打电话。
有了这些知识,您获取第二页结果的查询应该类似于:
firebase.database()
.ref('/posts/')
.orderByKey()
.startAt("-M5HMJQe319R19Cvak6")
.limitToFirst(11)
我强烈建议将该"-M5HMJQe319R19Cvak6"
值称为其他名称,而不是pagenumber
因为该变量名称使 Firebase 查询似乎是基于偏移量的,而实际上并非如此。
推荐阅读
- ruby - 如何使用 selenium 网格对 appium 运行并行测试?
- angular - 根据从另一个 primeNg 多选下拉列表中选择/取消选择的值,从 primeNg 多选下拉列表中添加/删除项目/值
- objective-c - NSTableView 在屏幕外隐藏行
- c# - 字符串替换,在 LINQ 查询中从另一个值中删除一个值
- flutter - 列表视图中的颤振包装小部件
- java - 如何在不关闭 Java 的情况下读取输入流?
- php - Laravel Delete and Update
- reactjs - 'npm run build' 经常冻结我的整个服务器
- javascript - 需要 JS 闭包和范围链澄清
- android - 为 android studio 创建 SHA1 或指纹