如何为Firebase分页动态设置快照限制
我尝试构建一个平面列表,它从使用分页的Firebase接收图像。 图像按时间戳降序排序,以便最新图像显示在顶部如何为Firebase分页动态设置快照限制,firebase,react-native,google-cloud-firestore,pagination,react-native-flatlist,Firebase,React Native,Google Cloud Firestore,Pagination,React Native Flatlist,我尝试构建一个平面列表,它从使用分页的Firebase接收图像。 图像按时间戳降序排序,以便最新图像显示在顶部 this.imageSubscribtion = await this.ref .orderBy('timestamp', 'desc') .limit(this.state.limit) .onSnapshot(async querySnapshot => { let imagesProm = querySnapshot.docs.map(async doc
this.imageSubscribtion = await this.ref
.orderBy('timestamp', 'desc')
.limit(this.state.limit)
.onSnapshot(async querySnapshot => {
let imagesProm = querySnapshot.docs.map(async doc => {
let data = await doc.data()
return {
...data
};
});
let images = await Promise.all(imagesProm);
this.setState(
{
pointer: querySnapshot.docs[querySnapshot.docs.length - 1],
images: images, //.reverse(),
isLoading: false,
}
);
});
如果用户到达列表的末尾,它将再加载30个项目
if (this.state.pointer) {
this.setState({refreshing: true}, async () => {
let result = await this.ref
.orderBy('timestamp', 'desc')
.limit(30)
.startAfter(this.state.pointer)
.get();
let imageRefs = result.docs.map(async doc => {
let data = await doc.data()
return {
...data
};
});
let images = await Promise.all(imageRefs);
let newImages = this.state.images.concat(images);
this.setState(
{
pointer: result.docs[result.docs.length - 1],
images: newImages,
refreshing: false,
limit: newImages.length,
});
});
}
这非常好,所有新图像都添加正确
当上传新图像时,问题开始出现。当imageSubscribtion的onsnapshot方法被激发时,将加载新图像,但初始限制为30个项目
如果有人正在查看图像,并且低于30个图像,平面列表将重置为30个图像,他需要再次向下滚动
是否可以动态设置查询限制?我还尝试使用startAt(this.state.pointer)定义查询,但它不起作用,因为在第一次获取时指针仍然未定义。要使用
startAt()
您需要更改执行第一次查询的方式,因此从一开始就有值,并避免未定义的。你能看一下这篇文章,看看它是否对你有帮助吗?它为Firestore的动态分页提供了一些见解。谢谢,我会看一看,稍后再回复。我尝试了它,并改变了方向,因为我的列表从上到下,从新到旧。但如果新图像被删除或修改,它将无法正常工作。实际上,我从一开始的意思不是颠倒数据的顺序,而是在调用startAt()
时将查询配置为已经有值。你试过了吗?