2015-08-13 12 views
3

我有一个火力地堡调用它看起来像这样,火力地堡orderByChild与startAt()的第二个参数W /分页不odering

 ref.child(`floorPosts/${this.props.floorName}`) 
     .orderByChild('numberOfLikes') 
     .limitToLast(15) 
     .once('value', (snapshot) => { 
      var topPosts = []; 
      snapshot.forEach((childSnapshot) => { 
      var post = childSnapshot.val(); 
      post.key = childSnapshot.key(); 
      topPosts.unshift(post); 
      }); 
      this.lastPostKeyTop = topPosts[topPosts.length - 1].key; 
      this.setState({ 
      topPosts, 
      isLoading: false 
      }); 
     }); 

现在我想要做的,是用户滚动时在页面底部,我调用了这个函数。

ref.child(`floorPosts/${this.props.floorName}`) 
    .orderByChild('numberOfLikes') 
    .startAt(null, this.lastPostKeyTop) 
    .limitToLast(15) 
    .once('value', (snapshot) => { 
     var topPosts = []; 
     snapshot.forEach((childSnapshot) => { 
     var post = childSnapshot.val(); 
     post.key = childSnapshot.key(); 
     topPosts.unshift(post); 
     }); 
     this.setState({ 
     topPosts: this.state.topPosts.concat(topPosts), 
     isLoading: false, 
     }); 
    }); 

但是,它将最初的15个结果连接在一起。 .startAt接受了第二个参数,它(我相信)是最初从Firebase获取的最后一个项目的关键。但是,这似乎不适用于我的情况。我有一个预感,这与snapshot.forEach代码有关。

泰勒

回答

3

遗憾的答案令人难以置信的后期泰勒

的第二个参数是startAt()使用匹配的第一个参数的项目之间的歧义。因此,您必须通过numberOfLikes的值以开始第一页上最后一项的关键字(通常称为锚项)。

另请注意,这意味着下一组结果中的第一项与上一组结果中的最后一项相同。所以你需要检索一个额外的项目。

+0

哈哈哈。惊人。 <3你的puf! –

+0

我正在搜索有关此参数的链接的答案,然后找到您的问题。这只不过是两年而已。 :-) –