3

我有一點更復雜的數據結構導致深度嵌套圖形。現在我總是通過根查詢獲取/重新加載。但是我認爲這不是最好的方式,因爲它總是要求服務器解析整個樹。GraphQL獲取嵌套圖中的子塊的附加數據

是否有可能在第二個請求中嵌套圖中的子邊緣的附加數據/邊緣,而無需遍歷整個樹?

如果是的話如何?

例如:我有一個

RootQuery Spaces 
+ ... Other Layers 
    + Project 
     + Edge Tasks 
      + Edge SubTasks 
       + Edge Assigned User 

顯示我不是初始請求加載任務的項目清單。如果用戶打開一個項目,我希望只加載這個項目的任務,而不需要重新加載父/根或從RootQuery開始的整個樹。

回答

2

簡短回答: 不,您不能查詢未列爲根查詢類型定義字段的數據。

龍答: 雖然這也不是沒有可能增加一個字段,你的根查詢,就可以實現你只添加tasks查詢與參數的Project ID尋找的行爲。然後在你的客戶端,當你查詢projects時,不要要求他們的任務邊緣,而只是在你需要時發送一個單獨的查詢tasks(projectId: ID)

在apollo的GitHunt示例中,他們正在做同樣的事情來查詢每個回購評論列表,甚至在用戶將鼠標懸停在回購鏈接上時預取數據。當然,這是半渴望的行爲,而不是懶惰,所以你可以在那裏做出自己的選擇。

GraphQL的未來功能將使您能夠在客戶端準備就緒時向@stream任務發送列表,並且您還希望在沒有任何字段的情況下繼續使用@defer。您的方案可能會有更好的解決方案,不需要發送第二個查詢。

欲瞭解更多信息請點擊此處查看李的話:https://youtu.be/ViXL0YQnioU?t=12m50s