如何向Redux添加多个中间件?

doc*_*pus 57 middleware reactjs redux redux-thunk react-redux

我已经插入了一个中间件,redux-thunk,我想添加另一个,redux-logger.

如何配置它以便我的应用程序使用两个中间件?我试过传递一组[ReduxThunk, logger]但是没有用.

码:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk from 'redux-thunk';
import logger from 'redux-logger';

import App from './components/app';
import reducers from './reducers';
require('./style.scss');

const createStoreWithMiddleware = applyMiddleware(ReduxThunk)(createStore);

ReactDOM.render(
  <Provider store={createStoreWithMiddleware(reducers)}>
    <App />
  </Provider>,
  document.querySelector('#app')
);
Run Code Online (Sandbox Code Playgroud)

And*_*ker 94

applyMiddleware将每个中间件作为新参数(不是数组).所以只需传入你想要的每个中间件.

const createStoreWithMiddleware = applyMiddleware(ReduxThunk, logger)(createStore);
Run Code Online (Sandbox Code Playgroud)


小智 18

安迪的答案很好,但是,考虑到你的中间件在增长,下面的代码会更好:

const middlewares = [ReduxThunk, logger]
applyMiddleware(...middlewares)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我添加了 redux-thunk `const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk, ...middleware)));` (2认同)

Tha*_*ara 8

applyMiddleware应该作为第二个参数传递给createStore.applyMiddleware可以有多个中间件作为参数.

const store = createStore(reducers, applyMiddleware(ReduxThunk, logger));

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.querySelector('#app')
);
Run Code Online (Sandbox Code Playgroud)

  • 问题是其中一个中间件不需要`applyMiddleware`,所以我不得不使用`compose(applyMiddleware(saga),devtools())`.谢谢! (2认同)