我有一个 Firebase 调用,如下所示,
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
code.
抱歉泰勒的答复太晚了
第二个参数startAt()
is only用于消除与第一个参数匹配的项目之间的歧义。所以你必须传入两个值numberOfLikes
开始于and第一页上最后一项的键(通常称为锚项)。
另请注意,这意味着下一组结果的第一项将与上一组结果中的最后一项相同。所以你需要取回一件额外的物品。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)