上下文
为了将服务或其他值传递给所有解析器共享,LiveResolverStore
提供了一种传递上下文的方式。 这将传递给所有解析器(实时和非实时)的第三个参数。 此上下文参数类似于服务器上使用的 上下文参数,通常用于保存数据库连接等内容。
设置
为了将上下文传递给实时解析器,在创建环境之前将 resolverContext
参数传递给 LiveResolverStore
的初始化
const store = new LiveResolverStore(source, {
resolverContext: {
store: customStore,
},
});
在解析器中使用
- JavaScript
- Flow
解析器中的最后一个参数将包含上下文类型,该类型包含初始化时传递给存储的值。 如果解析器在模型类型上或读取 @rootFragment
,则上下文值将是第三个参数。 如果解析器不在模型类型上且不读取 @rootFragment
,则上下文值将作为第三个参数传递。 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"
}
}