2016-07-30 1 views
0

저는 React/Redux/Thunk/React Router 응용 프로그램에서 작업 중이며 구성 요소가 렌더링 될 때마다 각 감속기에 대한 상태가 예기치 않게 기본 상태로 되돌아가는 것으로 나타납니다. 예를 들어구성 요소가 렌더링 될 때마다 상태가 기본으로 되돌아가는 것 같습니다.

는 :

나는 홈페이지 경로를 찾아

, 홈페이지 구성 요소를 렌더링하고, 상태가 올바르게 설정 - loggerMiddleware의 출력에서 ​​예상하고 응용 프로그램이 예상대로 작동하기 때문에 새로운 상태를 보여줍니다.

그러나 다른 경로를 탐색하고 EventPage 구성 요소를 렌더링 할 때 상태가 비어 있거나 기본값 인 것처럼 mapStateToProps의 state 인수는 단순히 기본 객체를 보는 것처럼 비어있는 객체의 목록입니다. combinereducers에서. LoggerMiddleware 출력에서도 똑같은 것을 볼 수 있습니다. 마찬가지로 홈페이지 구성 요소를 다시 탐색 할 때 상태는 다시 한 번 비어 있음/기본값입니다.

내 기대는 페이지 뷰/구성 요소 렌더 사이에 상태가 유지된다는 것입니다. 그 맞습니까?

그것이 내가 만들고있어 실수를 식별하는 데 도움이 경우 해당 응용 프로그램의 일부 발췌 - 더뿐만 아니라 제공하는 해피 :

에게 Eventpage 및 홈페이지 구성 요소/용기의 바닥 :

export default connect(mapStateToProps, mapDispatchToProps)(HomePage); 

export default connect(mapStateToProps, mapDispatchToProps)(EventPage); 

라우터가하는 index.js에 정의 된

ReactDOM.render(
    <Provider store={store}> 
     <Router history={browserHistory} > 
      <Route path="/" component={HomePage}/> 
     <Route path="EventsSimpleList" component={EventsSimpleList}/> 
      <Route path="events/:eventId" component={EventPage}/> 
     </Router> 
    </Provider> 
    , document.querySelector('#root')); 

내 rootReducer 정의 :

const rootReducer = combineReducers({ 
    EventsToAssets: EventsToAssetsReducer, 
    Assets: AssetsReducer, 
    Events: EventsReducer, 
    Venues: VenuesReducer, 
    Artists: ArtistsReducer, 
    Homepage: HomepageReducer 
}); 

export default rootReducer; 
+2

예상하신 내용이 정확합니다. 더 많은 코드가 필요합니다. 어쩌면'createStore'를 두 번 이상 호출하고 있을까요? 또는 ReactDom.render를 두 번 이상 사용 하시겠습니까? 감속기에서 상태를 수정했을 수 있습니까? – azium

+0

@azium, http://stackoverflow.com/a/34813184/479891에서 다른 질문에 대한 답변을 찾았습니다. "두 가지 다른 http 요청간에 상점을 저장하는 방법은 없습니다." 제가 올바르게 이해한다면, 이것은 "국가가 페이지 뷰/컴포넌트 렌더 사이에 머무를 것"이라는 나의 기대가 맞다는 당신의 의견과 상충되는 것 같습니다. 아마이 질문에서 관찰하고있는 행동이 예상되는 것일까? –

+0

그 대답은 구체적으로 그 수정이 당신이하고있는 것 인 React Router를 사용한다고 말합니다. 클라이언트 측 라우터를 사용할 때 저장소를 구성하는 JavaScript를 다시로드하지 않으므로 여러 경로에 걸쳐 유지됩니다. 문제는 코드의 다른 부분에 있습니다. 어떻게 앱을 제공하고 있습니까? webpack dev에 서버 또는 익스프레스를 통해? 이것은 dev와 prod 모두에서 발생합니까? – azium

답변

0

<a> 요소를 <Link> 요소를 반응 라우터에서 가져온 것으로 바꾸어서 문제를 해결했습니다. 이렇게하면 사용자가 주소 표시 줄에 새 URL을 수동으로 입력 할 때 문제가 해결되지 않지만 링크의 경우 문제가 해결됩니다. 나는 이것이 실제로 예상되는 행동이라고 믿는다. 나는 실수로 누군가가 나를 교정 할 것이라고 확신한다.

+1

아, 맞아요. localstorage를 사용하여 수동으로 입력 한 URL 문제를 해결할 수 있습니다 (지원해야하는 경우). 그렇다면 redux-persist 라이브러리를 살펴보십시오. – azium