跳到主要内容

getDefaultManagers()

getDefaultManagers 返回一个 Manager 数组,用于传给 DataClientPlugin。

这样可以轻松地配置和添加自定义 Manager,同时不受默认 Manager 未来可能发生的变化影响。

目前返回 [DevToolsManager*, NetworkManager, SubscriptionManager].

*(生产构建中不包含 DevToolsManager。)

用法​

main.ts
import { createApp } from 'vue';
import { DataClientPlugin, getDefaultManagers } from '@data-client/vue';
import App from './App.vue';

const managers = getDefaultManagers({
// set fallback expiry time to an hour
networkManager: { dataExpiryLength: 1000 * 60 * 60 },
});

const app = createApp(App);
app.use(DataClientPlugin, { managers });
app.mount('#app');

省略 managers 时,DataClientPlugin 会使用不带参数的 getDefaultManagers()。其他选项请参阅 DataClientPlugin。

参数​

每个参数表示对应 Manager 的配置,可以是以下三种类型之一:

  • 任何普通对象都会作为选项传给该 Manager 的构造函数。
  • 直接使用的 Manager 实例。
  • null。传入时会排除该 Manager。
getDefaultManagers({
devToolsManager: { trace: true },
networkManager: new NetworkManager({ errorExpiryLength: 1 }),
subscriptionManager: null,
});

networkManager​

备注

这里不允许使用 null,因为 NetworkManager 是必需的

当 Endpoint 没有定义 dataExpiryLength 时,dataExpiryLength 将作为后备值。

当 Endpoint 没有定义 errorExpiryLength 时,errorExpiryLength 将作为后备值。

devToolsManager​

传给 redux devtools 的参数。

subscriptionManager​

实现了 SubscriptionConstructable 的类,例如 PollingSubscription

示例​

追踪 action​

例如,我们可以启用 trace 选项,帮助追踪 action 是从哪里分发的。它对性能影响很大,因此通常是禁用的。

const managers = getDefaultManagers({
devToolsManager: { trace: true },
});

Manager 继承​

传入 Manager 实例让我们可以通过继承来定制 Manager。

import {
NetworkManager,
getDefaultManagers,
type FetchAction,
} from '@data-client/vue';

class LoggingNetworkManager extends NetworkManager {
protected handleFetch(action: FetchAction) {
console.log('fetching', action.key);
return super.handleFetch(action);
}
}

const managers = getDefaultManagers({
networkManager: new LoggingNetworkManager(),
});

禁用​

使用 null 会彻底移除 Manager。NetworkManager 无法通过这种方式移除。

const managers = getDefaultManagers({
devToolsManager: null,
subscriptionManager: null,
});

这里我们禁用了除 NetworkManager 之外的所有 Manager。