使用URL参数在Firebase中数字分页博客文章的正确方法是什么

时间:2019-04-20 15:59:43

标签: javascript firebase google-cloud-firestore react-redux-firebase

我有一个基于React Redux并使用Firebase构建的博客应用程序。博客应具有“查看所有帖子”页面,该页面仅限于每页显示10个帖子,并根据当前的ULR参数进行分页;也就是说,如果我当前的网址是“ example.com/posts/page/7”,则我有100条帖子,我需要按时间顺序将用户帖子71到80发送。

我尝试做并且正在工作的是请求第一篇(:urlParam * 10)博客文章,并在前端过滤结果。在前面的示例中,这意味着我GET请求了前80个帖子,而在React的render函数中,我仅过滤了71到80之间的帖子。

这种方法显然效率低下,根本无法扩展。那么最有效的方法是什么?

我确实注意到,在大多数firestore分页教程中,它们都使用了例如对我示例的第70个帖子的引用,并要求接下来的10个帖子。就我而言,这不是一个很好的解决方案,因为用户可以随意跳到任何页面而看不到先前的页面。

1 个答案:

答案 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

希望有帮助!