【问题标题】:How do I paginate with Cloud Firestore?如何使用 Cloud Firestore 进行分页?
【发布时间】:2019-03-06 21:41:59
【问题描述】:

当我点击 react-native 中的加载更多消息按钮时,我需要从 Cloud Firestore 获得 50 多条文档消息。

下面是我的代码,当我打开我的应用程序时会收到 50 个文档,但不是所有消息。

getMessagesFrom(usr){
    return db.collection("ppl/" + usr + "/messages/").orderBy("createdAt", "desc").limit(50).get().then(snapshot => {
        this.docs = snapshot.docs;
        let l = this.docs.length;
        for (let i = 0; i < l; i++) {
            this.dblid = this.state.myId + usr;
            if (this.msgObj[this.dblid] === undefined) {
                this.msgObj[this.dblid] = [this.docs[i].data()];
            } else {
                this.msgObj[this.dblid] = [...this.msgObj[this.dblid], this.docs[i].data()]
            }
            if (i === l - 1) {
                return this.msgObj;
            }
        }
        return false;
    });
}

我的期望是通过单击更多消息按钮获得更多 50 个文档。

【问题讨论】:

  • 你可以在limit之前使用startAfter(50)
  • 谢谢SiSa,我用过但不知道要保留lastdoc

标签: firebase react-native google-cloud-firestore


【解决方案1】:

来自文档:

使用 startAt() 或 startAfter() 方法定义查询的起点。 startAt() 方法包括起点,而 startAfter() 方法不包括起点。

对于管理页面,您可以创建状态来存储您的页码,并在每次获取数据时增加它

const pageSize = 50;     // your page size
state = { pageNum: 0 };  // your page number

getMessagesFrom(usr){
    return db.collection("ppl/" + usr + "/messages/")
      .orderBy("createdAt", "desc")
      .startAt(this.state.pageNum * pageSize) // here we set start point
      .limit(pageSize)
      .get().then(snapshot => {

          this.setState({ pageNum: pageNum+1 });

          ...your code

    });
}

【讨论】:

  • 你将如何对“后退”进行分页?您将如何分页到特定索引?就像你点击一个数字一样:&lt; 1 2 3 4 5 6 7 &gt;
猜你喜欢
  • 2019-04-02
  • 1970-01-01
  • 2020-10-09
  • 2018-11-17
  • 1970-01-01
  • 2021-03-31
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多