作为练习,我正在编写简单(以及尽可能无状态的)客户端应用程序(在React)显示在单个Facebook实体中的帖子中显示帖子。该应用程序从Facebook Graph API获取数据。
我使用Facebook JS SDK查询以下URL:/<entity-id>/feed?limit=20&fields=...
我有简单的分页按钮("上一个"&amp;" next"),它们分别在response.paging.previous
和response.paging.next
中分别查询API响应中收到的分页URL。
问题是我不知道如何找到我是否在最后一页上正确禁用"下一个"按钮。
有几件事我尝试过,但是我仍然没有得到我想要的。
选项1:允许单击"下一个",直到没有更多数据中的数据
-
response.data.length == 0
时禁用按钮。 -
paging
对象即使没有更多的数据,也包含next
URL,因此我在没有数据的页面之前无法检查它。 -
问题是,当我到达该页面时,
response
中也没有paging
对象。结果,我无法使用"上一个"按钮与数据返回最后一页。
选项2:允许单击"下一个",直到我收到比查询限制少的数据
-
response.data.length < limit
时禁用按钮。 -
在
data.length % limit != 0
的收藏中效果很好。 -
问题在相反的情况下,例如,当集合中有40个对象并且我在第二页上,我仍然可以单击"下一步",但随后我最终进入了页面没有更多的对象,如选项1所述。
选项3:请记住上一个请求的URL
-
最后一个请求URL存储在变量中,即使在
response
中没有paging
数据的情况下,"上一个"按钮也可以工作。 -
仅解决"您不能回去"问题。
-
无法正确禁用"下一个"按钮来解决问题。仍然可以单击带有数据的最后一页上的"下一步",然后进入没有数据的空页。
所以问题是:
如何找到我已经收到了集合中的最后一项,并单击"下一步",我将获得无效的空页面?
-
对于我来说,Graph API即使在集合的开始/结尾都提供
response.paging
URL似乎很奇怪。 -
例如,如果我有10篇文章的供稿,并且我使用
limit 20
查询,则我在paging.previous
和CC_18和paging.next
中都带有data: Array[10]
和paging
对象,即使没有"以前",并且下一" 数据。 -
查询这些URL会在
response
中使用空的data
数组,并且没有paging
对象,因此我无法返回无状态应用程序。 -
如果集合的开头没有
paging.previous
,而收藏结束时没有paging.next
?
,不会更好
对于任何人看到的人 - 这实际上是可行的。我不确定以前是否曾经返回上一个和下一个或OP是否在任何地方犯错误。但是,我可以确认当数据能够按照您的期望向前或向后返回上一个/下一个。
。以下示例来自Graph API分页文档,并显示结果集是集合的第一页。
"data": [
*data returned*
],
"paging": {
"cursors": {
"before": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd3T1Rrek9UZAzROVGN3TlRNNE5Eb3hOVEV6TURnM09UTTIZD",
"after": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd4TURBd09UazROVFk1T0RNM05Eb3hOVEV6TURreU5qQXoZD"
},
"next": "https://graph.intern.facebook.com/v2.11/1809938745705498/comments?access_token=valid_token_goes_here"
}
请注意对象中没有"以前的"属性。仅检查下一个或上一个出现是否足以让我继续禁用/隐藏按钮。
通过基于Graph API光标的分页。https://developers.facebook.com/docs/graph-api/using-graph-api#cursors
没有匹配的方法可以按照您的意愿进行操作。您应该分别管理左记录和下一个按钮,分别是图形API分页。作为解决方案预付的下一页,此外还包括当前。
也保存以前的光标是不良习惯:"不要存储光标。如果添加或删除项目,光标可能会很快变得无效。"