получить больше данных после некоторого заданного идентификатора в firebase - PullRequest
0 голосов
/ 19 апреля 2020

Я недавно использую 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 сообщений до идентификатора M5HMJQe319R19Cvak6, используя это:

var starCountRef = firebase.database().ref('/posts/').limitToFirst(11);

все в порядке. Когда я go к последнему сообщению, мой reactjs снова вызовет эту функцию, отправив идентификатор последней загруженной записи (M5HMJQe319R19Cvak6) в переменную pageNumber.

Что я хотел бы сделать, это получить сообщения после этого последнего идентификатора, заданного для продолжения нумерации страниц, например:

-M5HMJQh2gWuah7GSht
-M5HMJQlrcfTTF3fbbI
-M5HMJQo6QT1HwWP2lz
-M5HMJQrIUiZyzhiqK3
-M5HMJQudSkFdvs42D1
...

Я пытался использовать startAt (ID), но ничего не показало:

var starCountRef = firebase.database().ref('/posts/').limitToFirst(11).startAt(pageNumber);

есть идеи, как мне это сделать? получать сообщения после идентификатора в firebase?

1 Ответ

1 голос
/ 19 апреля 2020

Запросы базы данных Firebase Realtime состоят из двух этапов:

  1. Вы вызываете один из orderBy методов, чтобы упорядочить дочерние узлы с указанным значением c.
  2. Вы затем вызовите один из методов фильтрации (startAt, endAt, equalTo), чтобы определить, где начинать и останавливать возврат данных.

Ваш код выполняет этот второй шаг, но не может выполнить первый шаг. Это означает, что вы используете порядок сортировки Firebase по умолчанию, который является приоритетом каждого узла. Приоритеты остались с тех дней, тогда у этого API не было лучших вариантов сортировки. В наши дни вы всегда будете звонить orderBy... перед фильтрацией.

С этим знанием ваш запрос для получения второй страницы результатов должен выглядеть примерно так:

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

I Настоятельно рекомендуем вызывать значение "-M5HMJQe319R19Cvak6", отличное от pagenumber, так как это имя переменной создает впечатление, будто запросы Firebase основаны на смещении, а это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...