限制
Relay 解析器確實有一些限制。在此我們將收集已知限制的列表,並在可能的情況下提供替代方案。
沒有 info 引數
在完整的 GraphQL 實作中,解析器可以存取 info
引數。此引數目前在 Relay 解析器中無法使用。
不支援抽象型別
目前無法使用 Relay 解析器定義具有多個具體型別的介面或聯合。這是我們未來希望支援的功能,但尚未實作。
所有欄位都必須可為 Null
目前所有解析器都必須輸入為可為 Null,才能支援將錯誤強制轉換為 null,而無需實作 null 冒泡。未來我們打算讓解析器支援某種版本的嚴格語意可空性。
並非所有 GraphQL 建構都受支援
目前 Relay 解析器僅支援 GraphQL 建構的子集。例如,目前無法使用 Relay 解析器定義輸入型別、列舉或介面。
不支援變更 (mutations)
目前 Relay 解析器僅支援讀取路徑。尚不支援定義變更欄位。我們正在努力了解針對反應式 Schema 執行變更的意義,並希望在未來支援它們。
解析器始終以延遲方式評估
目前 Relay 解析器始終以每個片段為基礎延遲評估。這樣的好處是,如果未讀取解析器,則永遠不會評估它。但是,如果您的客戶端 Schema 最終在讀取時發出非同步請求以擷取資料,則可能會導致瀑布式問題。我們正在積極探索 Relay 解析器的其他執行策略,例如在請求時評估查詢中的所有欄位,但預期解析器的定義方式將保持穩定。
冗長/笨拙的 docblock 語法
目前定義解析器需要定義一個具有 docblock 的函式,該 docblock 使用特殊語法並重複已在函式名稱和型別中指定的資訊。此外,為了確保這些值相符,Relay 會在其產生的型別中發出型別斷言。雖然這些斷言確實確保了安全性,但它們是笨拙的開發人員體驗。
為了解決這些問題,我們正在探索一種更簡化的方法,其中名稱和型別可以從您的 Flow 或 TypeScript 程式碼中推斷出來,類似於 Grats 所採用的方法。此語法可能會在未來版本的 Relay 中提供。