getDefaultEnhancers
返回一个包含默认增强器列表的数组。
预期用法
默认情况下,configureStore
会自动向 Redux store 设置中添加一些增强器。
const store = configureStore({
reducer: rootReducer,
})
// Store 已添加增强器,因为增强器列表未进行自定义
如果你想自定义增强器列表,你可以向 configureStore
提供一个增强器函数的数组:
const store = configureStore({
reducer: rootReducer,
enhancers: () => new Tuple(offline(offlineConfig)),
})
// store 特别应用了离线增强器
然而,当你提供 enhancer
选项时,你需要定义你想添加到 store 的 所有 增强器(除了 devtools)。configureStore
不会添加你列出的任何额外增强器,包括中间件增强器。
如果你想添加一些自定义增强器,但也仍然想添加默认增强器,getDefaultEnhancers
就很有用:
import { configureStore } from '@reduxjs/toolkit'
import { offline } from '@redux-offline/redux-offline'
import offlineConfig from '@redux-offline/redux-offline/lib/defaults'
import rootReducer from './reducer'
const store = configureStore({
reducer: rootReducer,
enhancers: (getDefaultEnhancers) =>
getDefaultEnhancers().concat(offline(offlineConfig)),
})
// Store 添加了所有默认的中间件 + 增强器,_以及_ 离线增强器
包含的默认增强器
结果数组将始终包含基于 configureStore
的 middleware
字段创建的 applyMiddleware
增强器。
此外,还包括 autoBatchEnhancer
,以允许对低优先级的动作更新进行"批处理"。这被 RTK Query 使用,并应在使用时提高性能。
目前,返回值是
const enhancers = [applyMiddleware, autoBatchEnhancer]
自定义包含的增强器
getDefaultEnhancers
接受一个选项对象,该对象允许以两种方式自定义每个增强器(不包括中间件增强器):
- 通过为其对应字段传递
false
,可以从结果数组中排除每个增强器 - 通过为其对应字段传递匹配的选项对象,可以自定义每个增强器的选项
这个例子展示了如何自定义 autoBatch 增强器:
// 文件: reducer.ts noEmit
export default function rootReducer(state = {}, action: any) {
return state
}
// 文件: store.ts
import rootReducer from './reducer'
import { configureStore } from '@reduxjs/toolkit'
const store = configureStore({
reducer: rootReducer,
enhancers: (getDefaultEnhancers) =>
getDefaultEnhancers({
autoBatch: { type: 'tick' },
}),
})
API 参考
interface AutoBatchOptions {
// 参见 "autoBatchEnhancer" 页面的选项
}
interface GetDefaultEnhancersOptions {
autoBatch?: boolean | AutoBatchOptions
}
function getDefaultEnhancers<M extends Middlewares<any>>(
options: GetDefaultEnhancersOptions = {},
): EnhancerArray<[StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>]>