使用URL参数在firebase中对博客帖子进行数字分页的正确方法是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用URL参数在firebase中对博客帖子进行数字分页的正确方法是什么?相关的知识,希望对你有一定的参考价值。
我有一个基于React Redux并使用Firebase的博客应用程序。该博客有一个“查看所有帖子”页面,该页面仅限于每页显示10个帖子,并根据当前的ULR参数进行分页;也就是说,我有100个帖子,如果我当前的URL是“example.com/posts/page/7”,我需要按时间顺序发送用户帖子71到80。
我尝试过并且正在工作的是请求第一个(:urlParam * 10)博客帖子并在前端过滤结果。在前面的例子中,这意味着我GET请求了前80个帖子,而在React的渲染功能中,我只过滤了71到80之间的帖子。
这种做法显然效率低下,根本无法扩展。那么最有效的方法是什么?
我注意到在大多数firestore分页教程中,他们使用了例如我的示例中的70个帖子并请求接下来的10个帖子。在我的情况下,它不是一个很好的解决方案,因为用户可以任意跳转到任何页面而不会看到以前的页面。
您不应该一次获取所有数据,这将是性能问题。而是仅请求向用户显示的帖子。
我们只需要在url中传递三个参数,如下所示,使它工作: -
1)pageId - 如果用户请求说71-80,则pageId将为7,pageSize为10
2)pageSize - 用户请求的项目数,例如 - 71-80是10项,
3)分页 - 如果分页为真,则将考虑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
希望有所帮助!!
以上是关于使用URL参数在firebase中对博客帖子进行数字分页的正确方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GatsbyJS 中对属于特定类别的帖子列表进行分页