跳到主要内容

 

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 添加了所有默认的中间件 + 增强器,_以及_ 离线增强器

包含的默认增强器

结果数组将始终包含基于 configureStoremiddleware 字段创建的 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> }>]>