2016-12-28 56 views
4

我想按特定順序顯示任務列表。問題是,用戶應該能夠更改訂單並將其保存到graphql中(用戶還可以添加和刪除列表中的任務)。目前我們已經實現了列表作爲中繼連接和添加/刪除/更新工作正常。以下是我們現在正在考慮的內容:在graphql/relay中維護有序列表

  • 使graphql返回一個有序列表。然後將該列表複製到組件中的本地狀態,並在那裏重新排列列表。然後通知graphql有關更改。
  • 使graphql在所有排序順序上返回一個數字。
  • 使graphql返回一個鏈表。所以每個任務都有對列表中下一個的引用。

正如我所看到的,這些都有一些問題。使用有序列表並將其複製到本地狀態,我們必須以某種方式處理添加/刪除操作,並相應地更新本地狀態。

使用數字排序順序,如果我們使用運行數字,例如1..2..3 ..,當我們想要在數字1和2之間移動數字200時,我們必須更新許多數字。這看起來像很多更新,我不知道這是如何處理的繼電器/ graphql。

隨着鏈接列表中還有很多記錄涉及改變順序,我不知道這是如何處理接力突變。也許從變異中返回3個任務(所有將指針更改爲列表中下一個的任務)並在「FIELDS_CHANGE」配置中指定?

這是使用relay/graphql/react時的最佳解決方案嗎?其他解決方案非常受歡迎。

回答

1

我們走下路徑創建一個單獨的突變對於相對移動的項目到另一個問題:

  • 一般get查詢返回的有序列表沒有任何order鍵或此類
  • 將某個項目由moveBeforemoveAfter變異完成,返回新排序的列表。參數是新的itemToMoverelativeTarget

的突變簽名大致是這樣的:

moveAfter(itemToMove: ID!, itemToMoveAfter: ID!): Item[]

將某個項目的另一項目具有相同的簽名&行爲之前,就在服務器端邏輯是有點不同。

因爲我們沒有使用中繼,所以我不能評論如何讓中繼知道這些變化。