如何在查询 Facebook Graph API 时找出我在最后一页?

How to find out I'm on the last page when querying Facebook Graph API?

作为练习,我正在编写简单的(并且尽可能无状态)client-side 应用程序(在 React 中)在单个 Facebook 实体的提要中显示帖子。应用程序从 Facebook Graph API.

获取数据

我使用Facebook JS SDK查询如下URL:/<entity-id>/feed?limit=20&fields=...

我有简单的寻呼按钮("previous" 和 "next"),它们正在查询在 response.paging.previous 和 API 响应中收到的寻呼 URLs =13=]分别。

问题是我不知道如何确定我是否在最后一页以正确禁用"next"按钮。

我尝试了一些方法,但仍然没有得到我想要的。

选项 1:允许单击 "next",直到没有更多数据响应

选项 2:允许单击 "next",直到我收到的数据少于查询限制

选项 3:记住上次请求的 URL

所以问题是:

我如何才能知道我已经收到了 collection 中的最后一项,并且通过单击 "next" 我将进入无效的空白页面?

按图 API 基于光标的分页。 https://developers.facebook.com/docs/graph-api/using-graph-api#cursors

没有匹配的方法可以随心所欲,开箱即用。 您应该管理左记录和下一个按钮,与 Graph API 分页分开。 作为解决方案预加载除当前页面之外的下一页。

同时保存以前的光标是不好的做法: "Don't store cursors. Cursors can quickly become invalid if items are added or deleted."

对于看到此内容的任何人 - 这实际上是可行的。我不确定 Graph 分页对象以前是否总是 returned 上一个和下一个,或者 OP 是否在任何地方犯了错误。但是,我可以确认当数据能够按照您的预期前进或后退时,它会正确 return 和 previous/next。

以下示例来自 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"
}

请注意对象中缺少 'previous' 属性。仅检查是否存在下一个或上一个就足以让我继续使用 disable/hide 个按钮。