如何在 Redux 中添加多个中间件?
How to add multiple middleware to 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')
);
applyMiddleware 将每个中间件作为一个新参数(不是数组)。因此,只需传入您想要的每个中间件即可。
const createStoreWithMiddleware = applyMiddleware(ReduxThunk, logger)(createStore);
applyMiddleware
应该作为第二个参数传递给 createStore。 applyMiddleware
可以有多个中间件作为参数。
const store = createStore(reducers, applyMiddleware(ReduxThunk, logger));
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.querySelector('#app')
);
安迪的回答很好,
但是,考虑到你的中间件在增长,
下面的代码会更好:
const middlewares = [ReduxThunk, logger]
applyMiddleware(...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));
现在在您的index.js中导入最近导出的商店并将其传递给提供程序组件。
您的 index.js 文件应如下所示:
...
...
import {Provider} from 'react-redux';
import {store} from './store';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'));
就这些!
回答可能有点晚,但我的问题是将 devtools 与中间件一起添加,希望这对某人有所帮助
// imports..
import { composeWithDevTools } from "redux-devtools-extension";
const store = createStore(
Reducer,
persistedState,
composeWithDevTools(applyMiddleware(ReduxThunk, promiseMiddleware))
);
您可以像下面的代码一样以逗号分隔的方式简单地传递中间件:
const store = createStore(reducer, applyMiddleware(thunk, logger));
注意:请在顶部导入 applyMiddlware、thunk 和 logger。
我已经插入了一个中间件,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')
);
applyMiddleware 将每个中间件作为一个新参数(不是数组)。因此,只需传入您想要的每个中间件即可。
const createStoreWithMiddleware = applyMiddleware(ReduxThunk, logger)(createStore);
applyMiddleware
应该作为第二个参数传递给 createStore。 applyMiddleware
可以有多个中间件作为参数。
const store = createStore(reducers, applyMiddleware(ReduxThunk, logger));
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.querySelector('#app')
);
安迪的回答很好, 但是,考虑到你的中间件在增长, 下面的代码会更好:
const middlewares = [ReduxThunk, logger]
applyMiddleware(...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));
现在在您的index.js中导入最近导出的商店并将其传递给提供程序组件。 您的 index.js 文件应如下所示:
... ...
import {Provider} from 'react-redux';
import {store} from './store';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'));
就这些!
回答可能有点晚,但我的问题是将 devtools 与中间件一起添加,希望这对某人有所帮助
// imports..
import { composeWithDevTools } from "redux-devtools-extension";
const store = createStore(
Reducer,
persistedState,
composeWithDevTools(applyMiddleware(ReduxThunk, promiseMiddleware))
);
您可以像下面的代码一样以逗号分隔的方式简单地传递中间件:
const store = createStore(reducer, applyMiddleware(thunk, logger));
注意:请在顶部导入 applyMiddlware、thunk 和 logger。