跳至主要內容
版本:v18.0.0

定義類型

您可以將客戶端狀態解析器視為定義一個在客戶端中運行的 GraphQL 伺服器。就像伺服器定義的 GraphQL 伺服器一樣,您需要定義架構中存在的類型以及這些類型上的欄位。就像 GraphQL 伺服器一樣,欄位被定義為函數,這些函數從父物件計算 GraphQL 值。在 Relay 解析器中,我們將這個父 JavaScript 物件稱為該類型的「模型」。

資訊

每個客戶端狀態 GraphQL 類型都由一個 JavaScript 物件類型支援,本文檔將其稱為「模型類型」。在此類型「上」的解析器將以該類型的實例作為其第一個引數傳遞。

解析器類型使用 @RelayResolver 標籤和您正在定義的類型名稱來定義。預設情況下,Relay 假設您的客戶端類型是「強」類型,這表示每個實例都有一個在該類型內唯一的 ID。此屬性允許 Relay 應用許多最佳化,例如記憶解析器計算。

定義「強」類型

強類型由一個 docblock 定義,後面接著一個導出的函數,該函數的名稱與該類型的名稱相符,並且只接受一個 ID 作為其引數,並回傳該類型的模型實例。定義此類型邊緣的解析器只需回傳該物件的 ID,而不是自己推導模型。

/**
* @RelayResolver User
*/
export function User(id: DataID): UserModel {
return UserService.getById(id);
}
提示

在文件中的其他地方,此函數被稱為該類型的「模型解析器」。

一般而言,客戶端資料儲存中的物件會隨著時間的推移而改變。為了支援這一點,Relay 解析器支援訂閱基礎資料來源的解析器。要了解有關此內容的更多資訊,請參閱即時欄位頁面。

定義「弱」類型

如果您的類型沒有唯一識別碼,您可以透過新增 @weak docblock 標籤將其定義為「弱」類型。弱類型由一個 docblock 定義,後面接著一個符合類型名稱的導出類型定義。定義弱類型邊緣的解析器需要回傳一個完全填充的、符合此類型的模型物件。

/**
* @RelayResolver ProfilePicture
* @weak
*/
export type ProfilePicture = { url: string, height: number, width: number };
提示

一般來說,弱類型用於為一組最終「屬於」父物件的欄位建立命名空間。