跳到主要内容

配置

defineUrqlConfig 配置支持对象和数组

参数

在配置的是数组参数时必须设置一个instanceName="default"默认的client的配置基于default来实现

属性描述类型必填默认值
instanceName用来寻找client的keystring---
url请求地址string---
requestPolicy请求策略RequestPolicycache-and-network
exchanges自定义exchangesExchange[]---
exchangeOpt可以启用AuthenticationmapExchange、Subscriptions{
authOpts?:AuthExchangeOpts,
mapOpts?:MapExchangeOpts
subOpts?: SubExchangeOpts
}
---

exchangesexchangeOpt 不能同时配置,同时配置只生效 exchanges

MapExchangeOpts

可以直接配置mapExchange中的onOperationonResultonError

AuthExchangeOpts

属性描述类型必填默认值
store提供获取数据和设置token的方法AuthExchangeOptsStore-
refreshApitoken刷新apistring-
login登陆地址string-
loginRedirectKey登陆地址记录当前路由keystringredirect
beforeRefreshTime提前多久刷新tokennumber0
headerModeheader签名模式RequestHeaderAuthorizationMode-
error异常处理(error: CombinedError,errStr?:string) => boolean-

AuthExchangeOptsStore

{
getState: () => {
token: string;
tenantId: string;
refreshToken: string;
},
setStateToken: (token: string) => {}
}

SubExchangeOpts

启用订阅支持

属性描述类型必填默认值
urlwebSocket地址string-
store提供获取数据和设置token的方法SubExchangeOptsStore-

SubExchangeOptsStore

{
getState: () => {
token: string;
tenantId: string;
appCode?: string;
deviceId?: string;
}
}

配置参考

单对象配置

import { defineUrqlConfig } from "@knockout-js/ice-urql/types";
import { debugExchange, fetchExchange } from "urql";
import store from "@/store";

// 正常集成
export const urqlConfig = defineUrqlConfig(() => ({
instanceName: "default",
url: "https://trygql.formidable.dev/graphql/basic-pokedex",
exchangeOpt: {
authOpts: {
store: {
getState: () => {
const { token, tenantId, refreshToken } = store.getModelState("user");
return {
token,
tenantId,
refreshToken,
};
},
setStateToken: (newToken) => {
store.dispatch.user.updateToken(newToken);
},
},
login: "/login",
refreshApi: "/api-auth/login/refresh-token",
},
},
}));

独立处理exchanges:

export const urqlConfig = defineUrqlConfig(() => ({
instanceName: "default",
url: "https://trygql.formidable.dev/graphql/basic-pokedex",
exchanges: [fetchExchange, debugExchange],
}));

数组配置

import { defineUrqlConfig } from "@knockout-js/ice-urql/types";
import { debugExchange, fetchExchange } from "urql";
import store from "@/store";

export const urqlConfig = defineUrqlConfig(() => [
{
instanceName: "default",
url: "https://trygql.formidable.dev/graphql/basic-pokedex",
exchangeOpt: {
authOpts: {
store: {
getState: () => {
const { token, tenantId, refreshToken } =
store.getModelState("user");
return {
token,
tenantId,
refreshToken,
};
},
setStateToken: (newToken) => {
store.dispatch.user.updateToken(newToken);
},
},
login: "/login",
refreshApi: "/api-auth/login/refresh-token",
},
},
},
{
instanceName: "instance2",
url: "https://trygql.formidable.dev/graphql/basic-pokedex",
exchanges: [fetchExchange, debugExchange],
},
]);