Configure devToolsExtension and applyMiddleware() inside the React-Redux Store
我无法弄清楚在redux存储中同时使用devToolsExtension和中间件的确切方法。
以下是我的redux商店代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import {createStore, combineReducers, applyMiddleware} from 'redux'; import thunk from 'redux-thunk'; import counterReducer from './../reducers/counterReducer'; const reducers = combineReducers({ counter: counterReducer }); const store = createStore( reducers, {counter: {count:0} }, // window.devToolsExtension && window.devToolsExtension(), applyMiddleware(thunk) ); export default store; |
由于createStore()需要3个参数。
在应用中间件thunk之前,我将其用作下面的代码,对我来说很好用。
1 2 3 4 5 | const store = createStore( reducers, {counter: {count:0} }, window.devToolsExtension && window.devToolsExtension() ); |
现在,我需要使用devToolsExtension并同时应用中间件。
我试图将devToolsExtension和applyMiddleware放入数组中,以使其充当第三个参数,但这不起作用。
1 2 3 4 5 6 | const store = createStore( reducers, {counter: {count:0} }, [window.devToolsExtension && window.devToolsExtension(), applyMiddleware(thunk)] ); |
现在的情况是,我需要将devToolsExtension用作第三个参数,或者将applyMiddleware()用作第三个参数。
但是我想同时使用两者。
我该如何实现?
使用Redux中的
1 2 3 4 5 6 7 8 9 10 11 12 | import { compose, // ... } from 'redux'; // ... const initialState = { counter: { count:0 } }; const store = compose( applyMiddleware(thunk), window.devToolsExtension && window.devToolsExtension(), )(createStore)(reducers, initialState); |
您可以通过这种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 | import { createStore, applyMiddleware,compose } from 'redux'; import reducers from '../reducers'; import reduxThunk from 'redux-thunk'; import {signOut} from '../actions/signOut'; import {checkLoggedInState} from '../actions/signIn'; //For Dev Tools -todo =remove for production bundle const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; // const createStoreWithMiddleware=applyMiddleware()(createStore); const store=createStore(reducers,composeEnhancers( applyMiddleware(reduxThunk,signOut,checkLoggedInState) )); export default store; |
这应该工作得很好-
1 2 3 4 5 6 7 | import { createStore, applyMiddleware, compose } from 'redux'; import rootReducer from '../reducers/rootReducer'; import captureMiddleWare from '../captureMiddleWare'; const commonStore = createStore(rootReducer, compose(applyMiddleware(captureMiddleWare), window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())); export default commonStore; |