2016-12-21 20 views
0

作爲一項練習,我正在編寫簡單的(也是儘可能無狀態的)客戶端應用程序(在React中),在單個Facebook實體的Feed中顯示帖子。應用程序從Facebook Graph API獲取其數據。如何查詢我在查詢Facebook Graph API時的最後一頁?

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

我有簡單的分頁按鈕(「前一個」 &「下一個」),其查詢分別在API響應接收在response.paging.previousresponse.paging.next尋呼網址。

問題是我不知道如何查看我是否在最後一頁上以正確禁用「下一步」按鈕。

有幾件事我嘗試過,但我仍然沒有得到我想要的。

方案1:讓點擊 「下一步」 直到有響應沒有更多的數據

  • 按鈕被禁用時response.data.length == 0

  • paging對象包含next即使沒有更多的數據要接收,所以我不能檢查它在沒有數據的頁面之前檢查它。

  • 問題是,當我到達該頁面時,response中也沒有包含paging對象。因此,我無法使用「上一個」按鈕返回數據的最後一頁。

選項2:允許點擊 「下一步」 直到我比查詢限制接收的數據較少

  • 按鈕時response.data.length < limit被禁用。

  • 適用於收藏的地方data.length % limit != 0

  • 問題是在相反的情況下,例如,當集合中有40個對象,並且我在第二個頁面上有極限20時,我仍然可以單擊「下一個」,但隨後我最終在頁面上沒有更多的對象,如選項提到1

方案3:記得去年請求URL

  • 最後一個請求的URL被存儲到變量中,「上一個」按鈕,即使在工作當沒有的情況下數據在response

  • 只解決「你不能回去」的問題。

  • 無法正確禁用「下一步」按鈕來解決問題。仍然可以用數據在最後一頁上點擊「下一步」,然後進入沒有數據的空白頁面。

所以,問題是:

我如何才能知道,我已經在收集,並通過點擊收到的最後一個項目「下一個」我會爲無效空白頁?

  • 即使在集合的開始/結束處,Graph API也提供了response.paging URL,這似乎很奇怪。

  • 例如,如果我已經養活了10帖,我有limit 20查詢,我收到responsedata: Array[10]和兩個paging.previouspaging.next與有效的URL paging對象,即使沒有「以前」,並沒有「下一步」數據。

  • 查詢在response這些URL結果與空data陣列和沒有paging對象,所以我沒有辦法找回無國籍應用。

  • 如果收集開始時沒有paging.previous,收集結束時沒有paging.next會不會更好?

回答

0

通過Graph API基於遊標的分頁。 https://developers.facebook.com/docs/graph-api/using-graph-api#cursors

沒有匹配的方式可以隨心所欲地開箱即用。 您應該分別管理圖表API分頁的左邊記錄和下一個按鈕。 作爲一種解決方案,除了當前的預載下一頁。

還保存以前的遊標是不好的做法: 「不要存儲遊標。如果項目被添加或刪除,遊標可能很快變得無效。

相關問題