如何选择性地将中间件应用于reducers?

bla*_*arg 3 redux redux-middleware redux-toolkit

使用 reduxjs-toolkit 我定义了我的商店和中间件,如下所示:

const store = configureStore({
    reducer: rootReducer,
    middleware: [reduxWebsocketMiddleware, adamBrownMiddleware]
});
Run Code Online (Sandbox Code Playgroud)

但是我只想将此中间件应用于某些减速器,而不是全部。具体来说,我想将 websocket 中间件应用于某些减速器,而在其他减速器中我调用 API,而这个 websocket 中间件不是必需的。

添加另一家商店来执行此操作似乎是一种反模式。

那么如何才能只为某些reducer应用中间件呢?

phr*_*hry 5

您始终可以在中间件中检查action.type属性(例如,如果它以 开头"mySliceName/"),否则跳过中间件的其余部分。

由于您没有真正给出中间件正在做什么以及为什么要限制它的示例,因此不可能为您提供更多的输入。

这可能看起来像这样:

const middleware = api => next => action => {
  if (!action.type.startsWith("myWebsocketSlice/") { return next(action); }
 // normal middleware code here
}
Run Code Online (Sandbox Code Playgroud)