【发布时间】:2018-04-13 03:56:31
【问题描述】:
我的 redux 商店有以下代码,当与 react 连接时,一切正常。现在我正在尝试在动作调度程序(反应之外)中访问商店的当前状态,但是当我在初始调度后使用它时得到空值..
import configureStore from '../../common/store/configureStore';
const history = createHistory();
const reduxRouterMiddleware = syncHistory(history);
// Create a new Redux store instance
const store = configureStore({},reduxRouterMiddleware);
console.log("Store data ===>"+JSON.stringify(store.getState()));
我的商店:
import {createStore, applyMiddleware, compose} from 'redux';
import thunk from 'redux-thunk';
import rootReducer from '../reducers';
import DevTools from '../containers/DevTools';
import createLogger from 'redux-logger';
import promise from 'redux-promise';
export default function configureStore(initialState, reduxRouterMiddleware) {
const logger = createLogger();
const createStoreWithMiddleware = applyMiddleware(
thunk,promise,
reduxRouterMiddleware
)(createStore);
const isProduction = process.env.NODE_ENV === 'production';
let store;
if (!isProduction) {
store = createStoreWithMiddleware(rootReducer, initialState, compose(
DevTools.instrument()
));
}
else if(initialState!=''){
store = createStoreWithMiddleware(rootReducer, initialState, compose(
));
}else{
store = createStore(rootReducer)
}
if (module.hot) {
// Enable Webpack hot module replacement for reducers
module.hot.accept('../reducers', () => {
const nextRootReducer = require('../reducers');
store.replaceReducer(nextRootReducer)
})
}
return store
}
更新 1:
我对我的 store 变量进行了一些修改,使 store 成为全局变量,并添加了一个函数来返回 store,这似乎有效。这是正确的方法吗?
import {createStore, applyMiddleware, compose} from 'redux';
import thunk from 'redux-thunk';
import rootReducer from '../reducers';
import DevTools from '../containers/DevTools';
import createLogger from 'redux-logger';
import promise from 'redux-promise';
let store;
export default function configureStore(initialState, reduxRouterMiddleware) {
const logger = createLogger();
const createStoreWithMiddleware = applyMiddleware(
thunk,promise,
reduxRouterMiddleware
)(createStore);
const isProduction = process.env.NODE_ENV === 'production';
if (!isProduction && initialState!='') {
store = createStoreWithMiddleware(rootReducer, initialState, compose(
DevTools.instrument()
));
}
else if(initialState!=''){
store = createStoreWithMiddleware(rootReducer, initialState, compose(
));
}
if (module.hot) {
// Enable Webpack hot module replacement for reducers
module.hot.accept('../reducers', () => {
const nextRootReducer = require('../reducers');
store.replaceReducer(nextRootReducer)
})
}
return store
}
export function returnStore() {
return store
}
我可以访问以下商店。
import {returnStore} from '../../common/store/configureStore';
console.log("Store data rules ===>"+JSON.stringify(returnStore().getState().rules.data));
【问题讨论】: