123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import { applyMiddleware, compose, createStore, combineReducers } from 'redux';
- import thunk from 'redux-thunk';
- import { STORE_REPLACE } from './Constant';
- function getReducers(stores) {
- const reducers = {};
- stores.forEach(item => {
- if (reducers[item.key]) return;
- reducers[item.key] = item.handle.bind(item);
- });
- return reducers;
- }
- function initReducers(stores, project, services) {
- const map = {};
- stores.forEach(item => {
- if (map[item.key]) return;
- map[item.key] = true;
- item.init.bind(item)(project, services);
- });
- }
- function setReducersStore(store, stores) {
- const map = {};
- stores.forEach(item => {
- if (map[item.key]) return;
- map[item.key] = true;
- item.setStore.bind(item)(store);
- });
- }
- // redux 基本配置
- export function initStore(initState, stores, project, services) {
- initReducers(stores, project, services);
- const middleware = [thunk];
- const composeEnhancers = __DEBUG__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose : compose;
- const cr = combineReducers(getReducers(stores));
- const ce = composeEnhancers(applyMiddleware(...middleware));
- const store = createStore(cr, initState, ce);
- setReducersStore(store, stores);
- return store;
- }
- export function refreshStore(store, stores, project, services) {
- initReducers(stores, project, services);
- store.replaceReducer(combineReducers(getReducers(stores)));
- setReducersStore(store, stores);
- store.dispatch({ type: STORE_REPLACE });
- }
|