2017-10-31 16 views
1

내 redux 저장소에 대한 아래의 코드를 가지고 있고 모든 것이 반응과 유선 때 예상대로 잘 작동합니다. 이제 .. 내가 (반응의 외부) 액션 디스패처에 매장의 현재 상태에 액세스하려고하지만 난 처음 발송 한 후 이것을 사용 빈 값을 얻고있다reactx 외부의 redux에서 현재 저장소 상태에 액세스하는 방법?

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 :

나는 전역 변수로 저장을하는 내 가게 변수에 약간의 수정을 만들어 가게를 반환하는 기능을 추가하고이 작동하는 것 같다. 이것이 올바른 방법일까요?

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

답변

0

이것은 주석이 될 것이지만 나는 충분한 평판이 없기 때문에 어떤 종류의 대답을하도록 내버려 두었습니다.

우선 저는 JS, React 또는 Redux의 전문가가 아닌 배우기입니다. 호기심을 위해서, 정확히 어디서 가게가 필요한가요? 다음과 같은 장소와 방법을 알려드립니다.

  • React 생태계의 경우 분명히 Provider를 사용하고 있습니다.
  • Redux 액션 작성자의 경우 redux-thunk를 사용하고 있습니다.
  • React Router + Redux mix의 경우 react-router-redux를 사용하고 있습니다.

물론 당신이 쓴 것처럼 가게를 얻을 수 있습니다. 실제로, 나는 확실히 모르지만 나는 redux-thunk와 비슷한 개념을 사용하고 있다고 생각한다. 작업 생성자 함수 (작업 생성자 자체는 아님)에서 store로부터 dispatch 및 getState를받습니다. 그래서, 어떻게 든 당신이하는 것처럼 상점에서 그 메소드를 반환합니다.

0

당신이 redux-thunk을 사용하고 있기 때문에, 당신이 원하는 행동 작성자에서 저장소의 현재 상태를 얻을 수 있습니다 대신 전 세계적으로 저장소를 노출 것을 사용에

function someAction() { 
    return (dispatch, getState) => { 
    console.log(store.getState()) 
    } 
} 

내 sugestion입니다.