如果我使用createListenerMiddleware
创建两个独立的中间件,处理不同的职责,这会比创建单个侦听器中间件有任何显著的性能成本吗?他们之间是否存在不受欢迎的互动方式?
一个问题是,如果我调度addListener
,removeListener
或clearAllListeners
,它们会到达两个中间件,还是被链中的第一个中间件消耗?
另一种方法是在自己的模块中创建一个共享侦听器中间件,可以将其导入到其他两个模块中以添加侦听器,这可能涵盖大多数用例,但如果我想传入不同的额外参数或不同的错误处理,则不适用。
我创建了侦听器中间件:)
你应该在一个应用程序中只有一个侦听器中间件实例,我真的想不出一个很好的理由为什么你要让有多个侦听器中间件实例。是的,添加/删除侦听器操作肯定会由看到它们的第一个侦听器中间件实例处理和停止,没有区别。
如果目标是拥有独立的侦听器+效果定义,而不依赖于导入相同的中间件实例,我建议尝试文档中显示的第三种文件组织方法,其中功能文件导出一个回调,将startListening
作为参数:
- https://redux-toolkit.js.org/api/createListenerMiddleware organizing-listeners-in-files
// feature1Slice.ts
import type { AppStartListening } from '../../app/listenerMiddleware'
const feature1Slice = createSlice(/* */)
const { action1 } = feature1Slice.actions
export default feature1Slice.reducer
export const addFeature1Listeners = (startListening: AppStartListening) => {
startListening({
actionCreator: action1,
effect: () => {},
})
}