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。