web-dev-qa-db-fra.com

Comment ajouter plusieurs middleware à Redux?

J'ai déjà un plug-in connecté, redux-thunk, et j'aimerais en ajouter un autre, redux-logger.

Comment puis-je le configurer pour que mon application utilise les deux middlewares? J'ai essayé de passer dans un tableau de [ReduxThunk, logger] mais ça n'a pas marché.

Code:

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')
);
52
doctopus

applyMiddleware prend chaque middleware comme un nouvel argument (pas un tableau). Il suffit donc de passer dans chaque middleware que vous souhaitez.

const createStoreWithMiddleware = applyMiddleware(ReduxThunk, logger)(createStore);
83
Andy Noelker

la réponse de Andy est bonne, mais, considérez que vos middlewares sont en croissance, les codes ci-dessous seront meilleurs:

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

applyMiddleware devrait passer dans createStore en tant que deuxième paramètre. applyMiddleware peut avoir plusieurs middlewares comme arguments.

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

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.querySelector('#app')
);
8

Voici comment appliquer un ou plusieurs middlewares:

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));

Importez maintenant le magasin récemment exporté dans votre fichier index.js et transmettez-le au composant Fournisseur. Votre fichier index.js devrait ressembler à ceci:

... ...

import {Provider} from 'react-redux';
import {store} from './store';

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

C'est tout !

0
MUSTAPHA GHLISSI