这是我的数据结构,使用时间戳作为ID:
{
"posts": {
"1703921218409": {
"category": "All",
"content": "1",
"title": "1"
},
"1703921229327": {
"category": "All",
"content": "2",
"title": "2"
},
"1703921232777": {
"category": "All",
"content": "3",
"title": "3"
},
"1703921236094": {
"category": "All",
"content": "4",
"title": "4"
},
"1703921239468": {
"category": "All",
"content": "5",
"title": "5"
},
"1703921243055": {
"category": "All",
"content": "6",
"title": "6"
},
"1703921246316": {
"category": "All",
"content": "7",
"title": "7"
}
}
我想用reactjs建立一个论坛并在一页中显示5个帖子,所以它的工作原理如下: 第1页(第1-5篇文章),第2页(第6-10篇文章),...等
问题是我不知道如何直接获取帖子 6-10,我所能做的就是从 firebase 获取帖子 1-10 并在客户端过滤帖子 6-10。
const snapshot = await get( query(ref(db, 'posts'), limitToLast(10)) )
// do a iteration to get needed data (post 6-10)
但是如果用户转到第 1000 页,我需要获取帖子 1-5000 并丢弃帖子 1-4995 只是为了最后 5 个帖子,这似乎效率低下。
那么有没有办法直接获取子集数据,而不是获取整个数据并过滤掉呢?
我想在reactjs中建立一个论坛并在一个页面中显示5个帖子,所以它的工作方式如下:page1(帖子1-5),page2(帖子6-10),...等
您正在寻找的称为分页。这意味着您必须以较小的块加载数据。说到实时数据库,据我所知,官方还没有给出如何实现的例子。这个主题之前已经介绍过,所以请检查以下方法:
但是,如果您在某个时间点考虑尝试使用Cloud Firestore,我可以告诉您,有一种非常简单的方法来实现分页,即使用查询游标。也许你应该尝试一下。