コンテキスト
すべてのリゾルバーで共有されるサービスやその他の値を渡すために、LiveResolverStore
はコンテキストを渡す手段を提供します。これは、すべてのリゾルバー(ライブと非ライブ)の3番目の引数に渡されます。このコンテキスト引数は、通常データベース接続のようなものを保持するサーバーで使用されるコンテキスト引数に類似しています。
セットアップ
ライブリゾルバーにコンテキストを渡すには、環境を作成する前に、LiveResolverStore
の初期化にresolverContext
引数を渡します。
const store = new LiveResolverStore(source, {
resolverContext: {
store: customStore,
},
});
リゾルバーでの使用
- JavaScript
- Flow
リゾルバーの最後の引数には、初期化時にストアに渡された値を含むコンテキストタイプが含まれます。リゾルバーがモデルタイプ上にあるか、@rootFragment
を読み取る場合、コンテキスト値は3番目の引数になります。リゾルバーがモデルタイプ上になく、@rootFragment
を読み取らない場合、コンテキスト値は3番目の引数として渡されます。Relayによって生成されたアーティファクトには、リゾルバーが正しく型付けされていることを確認するための生成された型アサーションが含まれます。
import type { LiveState } from 'relay-runtime';
/**
* @RelayResolver Query.counter: Int
* @live
*/
export function counter(
_args,
context
) {
return {
read: () => context.store.getState().counter,
subscribe: (callback) => {
return context.store.subscribe(callback);
},
};
}
コンテキストは現在Flowではサポートされていません
型チェック
リゾルバーが正しい型で実装されていることを確認するために、プロジェクト構成にresolverContextType
を渡します。このパラメータは、型名とインポート元のpath
を期待します。
{
"name": "project",
"language": "flow",
"resolverContextType": {
"name": "IResolverContextType",
"path": "path/to/file/IResolverContextType"
}
}
パッケージからインポートするには、package
インポートに以下の構文を使用します。
{
"name": "project",
"language": "flow",
"resolverContextType": {
"name": "IResolverContextType",
"package": "@package/name"
}
}