跳至主要内容

getDefaultEnhancers

返回包含默认增强器列表的数组。

预期用途

默认情况下,configureStore 会自动将一些增强器添加到 Redux 商店设置中。

const store = configureStore({
reducer: rootReducer,
})

// Store has enhancers added, because the enhancer list was not customized

如果你想自定义增强器列表,可以向 configureStore 提供一个增强器函数数组。

const store = configureStore({
reducer: rootReducer,
enhancers: () => new Tuple(offline(offlineConfig)),
})

// store specifically has the offline enhancer applied

但是,当你提供 enhancer 选项时,你需要负责定义要添加到商店的所有增强器(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 has all of the default middleware + enhancers added, _plus_ the offline enhancer

包含的默认增强器

生成的数组将始终包含基于 configureStoremiddleware 字段创建的 applyMiddleware 增强器。

此外,还包含 autoBatchEnhancer,以允许对低优先级操作更新进行“批处理”。这由 RTK Query 使用,并且在使用它时应该会提高性能。

目前,返回值是

const enhancers = [applyMiddleware, autoBatchEnhancer]

自定义包含的增强器

getDefaultEnhancers 接受一个选项对象,允许以两种方式自定义每个增强器(不包括中间件增强器)。

  • 可以通过为其对应字段传递 false 来从结果数组中排除每个增强器。
  • 可以通过为其对应字段传递匹配的选项对象来自定义每个增强器的选项。

此示例显示了自定义 autoBatch 增强器。

import rootReducer from './reducer'
import { configureStore } from '@reduxjs/toolkit'

const store = configureStore({
reducer: rootReducer,
enhancers: (getDefaultEnhancers) =>
getDefaultEnhancers({
autoBatch: { type: 'tick' },
}),
})

API 参考

interface AutoBatchOptions {
// see "autoBatchEnhancer" page for options
}

interface GetDefaultEnhancersOptions {
autoBatch?: boolean | AutoBatchOptions
}

function getDefaultEnhancers<M extends Middlewares<any>>(
options: GetDefaultEnhancersOptions = {},
): EnhancerArray<[StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>]>