我有一个基于React Redux并使用Firebase构建的博客应用程序。博客应具有“查看所有帖子”页面,该页面仅限于每页显示10个帖子,并根据当前的ULR参数进行分页;也就是说,如果我当前的网址是“ example.com/posts/page/7”,则我有100条帖子,我需要按时间顺序将用户帖子71到80发送。
我尝试做并且正在工作的是请求第一篇(:urlParam * 10)博客文章,并在前端过滤结果。在前面的示例中,这意味着我GET请求了前80个帖子,而在React的render函数中,我仅过滤了71到80之间的帖子。
这种方法显然效率低下,根本无法扩展。那么最有效的方法是什么?
我确实注意到,在大多数firestore分页教程中,它们都使用了例如对我示例的第70个帖子的引用,并要求接下来的10个帖子。就我而言,这不是一个很好的解决方案,因为用户可以随意跳到任何页面而看不到先前的页面。
答案 0 :(得分:0)
您不应一次获取所有数据,这将是性能问题。 而是只请求显示给用户的帖子。
我们只需要在url中传递三个参数即可,如下所示:-
1) pageId -如果用户要求说71-80,则pageSize为10时pageId将为7
2) pageSize -用户请求的项目数,例如-71-80是10个项目,
3)分页-如果分页为true,则将考虑pageId和pageSize,否则返回所有数据。
现在我们已经了解了属性,让我们讨论不同的情况:
1)我们需要前10个元素,pageId = 1,pageSize = 10
Request:-
apiUrl?PageSize=10&PageID=1&Pagination=true
Response:-
data: [...] // length 10
pageID: 1
pageSize: 10
totalPage: 262
totalSize: 2617
2)我们需要元素71-80,pageId = 7,pageSize = 10
Request:-
apiUrl?PageSize=10&PageID=7&Pagination=true
Response:-
data: [...] // length 10
pageID: 7
pageSize: 10
totalPage: 262
totalSize: 2617
3)我们需要71-120,pageId = 7,pageSize = 50
Request:-
apiUrl?PageSize=50&PageID=7&Pagination=true
Response:-
data: [...] // length 50
pageID: 7
pageSize: 50
totalPage: 53
totalSize: 2617
希望有帮助!