使用URL参数在firebase中对博客帖子进行数字分页的正确方法是什么?

问题描述 投票:0回答:1

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

我尝试过并且正在工作的是请求第一个(:urlParam * 10)博客帖子并在前端过滤结果。在前面的例子中,这意味着我GET请求了前80个帖子,而在React的渲染功能中,我只过滤了71到80之间的帖子。

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

我注意到在大多数firestore分页教程中,他们使用了例如我的示例中的70个帖子并请求接下来的10个帖子。在我的情况下,它不是一个很好的解决方案,因为用户可以任意跳转到任何页面而不会看到以前的页面。

javascript firebase google-cloud-firestore react-redux-firebase
1个回答
0
投票

您不应该一次获取所有数据,这将是性能问题。而是仅请求向用户显示的帖子。

我们只需要在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

希望有所帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.