Firebase orderByChild与startAt()和#x27;s第二个参数w/分页未排序
我有一个Firebase调用,看起来像这样Firebase orderByChild与startAt()和#x27;s第二个参数w/分页未排序,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我有一个Firebase调用,看起来像这样 ref.child(`floorPosts/${this.props.floorName}`) .orderByChild('numberOfLikes') .limitToLast(15) .once('value', (snapshot) => { var topPosts = []; snapshot.forEach((childSnapsh
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获取的最后一个项的键,即初始获取。然而,这在我的情况下似乎不起作用。我有一种预感,这与快照有关。forEach代码。很抱歉泰勒的回答太晚了
startAt()
的第二个参数仅用于消除与第一个参数匹配的项之间的歧义。因此,您必须同时传入要开始的numberOfLikes
的值和第一页上最后一项的键(通常称为锚定项)
还要注意,这意味着下一组结果的第一项将与上一组结果的最后一项相同。因此,您需要检索一个额外的项目。哈哈哈。太神了我正在搜索有关此参数的答案以链接,然后找到了您的问题。仅仅不到两年的时间。:-)后续问题:如果在我们进行第一次查询后,有人单击“喜欢”,会发生什么情况?这意味着第一个参数
numberOfLikes
与数据库中的参数不再匹配。startAt()
还能正常工作吗?