【问题标题】:How to add multiple middleware to Redux?如何向 Redux 添加多个中间件?
【发布时间】:2017-10-12 19:18:43
【问题描述】:

我已经插入了一个中间件,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')
);

【问题讨论】:

    标签: reactjs redux react-redux middleware redux-thunk


    【解决方案1】:

    答案可能有点晚了,但我的问题是添加带有中间件的开发工具,希望这对某人有所帮助

     // imports.. 
     import { composeWithDevTools } from "redux-devtools-extension";
    
      const store = createStore(
         Reducer,
         persistedState,
        composeWithDevTools(applyMiddleware(ReduxThunk, promiseMiddleware))
     );
    

    【讨论】:

      【解决方案2】:

      这是应用一个或多个中间件的方法:

      import {createStore, applyMiddleware} from 'redux';
      import thunk from 'redux-thunk';
      import logger from 'redux-logger';
      import {rootReducer} from "../reducers"; // Import your combined reducers ;)
      
      const middleWares = [thunk, logger]; // Put the list of third part plugins in an array 
      
      // Create the store with the applied middleWares and export it
      export const store = createStore(rootReducer, applyMiddleware(...middleWares));
      

      现在在你的 index.js 中导入最近导出的 store 并将其传递给 Provider 组件。 您的 index.js 文件应如下所示:

      ... ...

      import {Provider} from 'react-redux';
      import {store} from './store';
      
      ReactDOM.render(
          <Provider store={store}>
              <App />
          </Provider>, 
      document.getElementById('root'));
      

      就是这样!

      【讨论】:

      • 非常完整的答案!
      【解决方案3】:

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

      const middlewares = [ReduxThunk, logger]
      applyMiddleware(...middlewares)
      

      【讨论】:

      • 谢谢,不过我加了redux-thunk const store = createStore(reducer, composeWithDevTools(applyMiddleware(thunk, ...middleware)));
      【解决方案4】:

      applyMiddleware 应该作为第二个参数传入 createStore。 applyMiddleware 可以有多个中间件作为参数。

      const store = createStore(reducers, applyMiddleware(ReduxThunk, logger));
      
      ReactDOM.render(
        <Provider store={store}>
          <App />
        </Provider>,
        document.querySelector('#app')
      );
      

      【讨论】:

      • 如果我这样做,我会得到“createStore 不是函数”。知道这个错误可能来自哪里吗?我正在尝试使用 redux-saga 和 remote-redux-devtools
      • 可能你没有正确导入createStore 或者使用的是旧版本的redux。
      • 问题是其中一个中间件不需要applyMiddleware,所以我不得不使用compose(applyMiddleware(saga), devtools())。谢谢!
      【解决方案5】:

      applyMiddleware 将每个中间件作为一个新参数(不是数组)。因此,只需传入您想要的每个中间件。

      const createStoreWithMiddleware = applyMiddleware(ReduxThunk, logger)(createStore);
      

      【讨论】:

      • 这很简单。谢谢!
      • 你如何将reducer传递给createStore方法?
      猜你喜欢
      • 1970-01-01
      • 2019-03-22
      • 2019-08-02
      • 1970-01-01
      • 2015-05-07
      • 2015-11-05
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      相关资源
      最近更新 更多