型の定義
クライアント状態リゾルバーは、クライアント上で実行されるGraphQLサーバーを定義していると考えることができます。サーバー定義のGraphQLサーバーと同様に、スキーマに存在する型と、それらの型上のフィールドを定義する必要があります。GraphQLサーバーと同様に、フィールドは、親オブジェクトからGraphQL値を計算する関数として定義されます。Relay Resolversでは、この親JavaScriptオブジェクトを型の「モデル」と呼びます。
各クライアント状態GraphQL型は、これらのドキュメントでは「モデル型」と呼ばれるJavaScriptオブジェクト型によってバックアップされています。この型に対するリゾルバーには、この型のインスタンスが最初の引数として渡されます。
リゾルバー型は、@RelayResolver
タグと、定義する型の名前を続けて使用して定義します。デフォルトでは、Relayはクライアント型を「強い」型とみなします。つまり、各インスタンスには、型内で一意のIDがあります。このプロパティにより、Relayはリゾルバー計算のメモ化などの多くの最適化を適用できます。
「強い」型の定義
強い型は、docblockと、型の名前と一致する名前を持つエクスポートされた関数によって定義され、この関数はIDを引数として受け取り、型のモデルのインスタンスを返します。この型へのエッジを定義するリゾルバーは、モデル自体を導出するのではなく、オブジェクトのIDを返すだけで済みます。
- Docblock
/**
* @RelayResolver User
*/
export function User(id: DataID): UserModel {
return UserService.getById(id);
}
/**
* @RelayResolver
*/
export function User(id: DataID): UserModel {
return UserService.getById(id);
}
ドキュメントの他の場所では、この関数は型の「モデルリゾルバー」と呼ばれています。
一般的に、クライアントデータストア内のオブジェクトは時間の経過とともに変化する可能性があります。これをサポートするために、Relay Resolversは基になるデータソースを購読するリゾルバーをサポートしています。これについては、ライブフィールドのページを参照してください。
「弱い」型の定義
型に一意の識別子が存在しない場合は、@weak
docblockタグを追加して「弱い」型として定義できます。「弱い」型は、docblockと、型の名前と一致するエクスポートされた型定義によって定義されます。「弱い」型へのエッジを定義するリゾルバーは、この型と一致する完全に設定されたモデルオブジェクトを返す必要があります。
- Docblock
/**
* @RelayResolver ProfilePicture
* @weak
*/
export type ProfilePicture = { url: string, height: number, width: number };
/**
* @RelayResolver
*/
export type ProfilePicture = { url: string, height: number, width: number };
一般的に、「弱い」型は、最終的に親オブジェクトに「属する」一連のフィールドの名前空間を作成するために使用されます。