動作建立器中間件
自訂中間件,偵測動作建立器是否錯誤地進行派送,而不是在派送前呼叫。
常見的錯誤是呼叫 dispatch(actionCreator)
而不是 dispatch(actionCreator())
。由於動作建立器具有靜態 type
屬性,因此這往往「有效」,但可能會導致意外的行為。
選項
export interface ActionCreatorInvariantMiddlewareOptions {
/**
* The function to identify whether a value is an action creator.
* The default checks for a function with a static type property and match method.
*/
isActionCreator?: (action: unknown) => action is Function & { type?: unknown }
}
匯出
createActionCreatorInvariantMiddleware
使用給定的選項建立動作建立器檢查中間件的執行個體。
你很可能不需要自己呼叫這個,因為 getDefaultMiddleware
已經這樣做了。範例
- TypeScript
- JavaScript
import {
configureStore,
createActionCreatorInvariantMiddleware,
Tuple,
} from '@reduxjs/toolkit'
import reducer from './reducer'
// Augment middleware to consider all functions with a static type property to be action creators
const isActionCreator = (
action: unknown
): action is Function & { type: unknown } =>
typeof action === 'function' && 'type' in action
const actionCreatorMiddleware = createActionCreatorInvariantMiddleware({
isActionCreator,
})
const store = configureStore({
reducer,
middleware: () => new Tuple(actionCreatorMiddleware),
})
import {
configureStore,
createActionCreatorInvariantMiddleware,
Tuple,
} from '@reduxjs/toolkit'
import reducer from './reducer'
// Augment middleware to consider all functions with a static type property to be action creators
const isActionCreator = (action) =>
typeof action === 'function' && 'type' in action
const actionCreatorMiddleware = createActionCreatorInvariantMiddleware({
isActionCreator,
})
const store = configureStore({
reducer,
middleware: () => new Tuple(actionCreatorMiddleware),
})