gpt4 book ai didi

带有 startAt() 的第二个参数的 Firebase orderByChild w/pagination 不排序

转载 作者:行者123 更新时间:2023-12-01 11:30:56 25 4
gpt4 key购买 nike

我有一个 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 代码有关。

最佳答案

抱歉 Tyler 的回答太晚了

startAt() 的第二个参数用于消除与第一个参数匹配的项之间的歧义。因此,您必须传入 numberOfLikes 的值以从 开始, 第一页上最后一项(通常称为 anchor 项)的键。

另请注意,这意味着下一组结果中的第一项将与上一组结果中的最后一项相同。因此,您需要取回一件额外的元素。

关于带有 startAt() 的第二个参数的 Firebase orderByChild w/pagination 不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com