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

上下文

為了將服務或其他值傳遞給所有解析器共享,LiveResolverStore 提供了一種傳遞上下文的方法。這會傳遞到所有解析器(即時和非即時)的第三個參數。此上下文參數類似於伺服器上使用的上下文參數,該參數通常保存資料庫連線之類的內容。

設定

為了將上下文傳遞給即時解析器,請在建立環境之前,將 resolverContext 參數傳遞給 LiveResolverStore 的初始化。

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

在解析器中使用

解析器中的最後一個參數將包含上下文類型,其中包含初始化時傳遞到儲存中的值。如果解析器位於模型類型上或讀取 @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);
},
};
}

類型檢查

為了確保解析器以正確的類型實作,請在專案設定中傳遞 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"
}
}