首页 > 解决方案 > 在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后获得帖子?

标签: javascriptfirebasefirebase-realtime-database

解决方案


Firebase 实时数据库查询包括两个步骤:

  1. 您调用其中一种orderBy方法来对特定值的子节点进行排序。
  2. 然后调用其中一种过滤方法 ( startAt, endAt, equalTo) 来确定从哪里开始和停止返回数据。

您的代码执行了第二步,但未能执行第一步。这意味着您使用的是 Firebase 的默认排序顺序,即每个节点的优先级。优先级是那个时候遗留下来的,然后这个 API 没有更好的排序选项。这些天来,您总是想orderBy...在过滤之前打电话。

有了这些知识,您获取第二页结果的查询应该类似于:

firebase.database()
  .ref('/posts/')
  .orderByKey()
  .startAt("-M5HMJQe319R19Cvak6")
  .limitToFirst(11)

我强烈建议将该"-M5HMJQe319R19Cvak6"值称为其他名称,而不是pagenumber因为该变量名称使 Firebase 查询似乎是基于偏移量的,而实际上并非如此。


推荐阅读