メインコンテンツにスキップ
バージョン: v18.0.0

コンテキスト

すべてのリゾルバーで共有されるサービスやその他の値を渡すために、LiveResolverStoreはコンテキストを渡す手段を提供します。これは、すべてのリゾルバー(ライブと非ライブ)の3番目の引数に渡されます。このコンテキスト引数は、通常データベース接続のようなものを保持するサーバーで使用されるコンテキスト引数に類似しています。

セットアップ

ライブリゾルバーにコンテキストを渡すには、環境を作成する前に、LiveResolverStoreの初期化にresolverContext引数を渡します。

const store = new LiveResolverStore(source, {
resolverContext: {
store: customStore,
},
});

リゾルバーでの使用

リゾルバーの最後の引数には、初期化時にストアに渡された値を含むコンテキストタイプが含まれます。リゾルバーがモデルタイプ上にあるか、@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);
},
};
}

型チェック

リゾルバーが正しい型で実装されていることを確認するために、プロジェクト構成に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"
}
}