저는 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;
예상하신 내용이 정확합니다. 더 많은 코드가 필요합니다. 어쩌면'createStore'를 두 번 이상 호출하고 있을까요? 또는 ReactDom.render를 두 번 이상 사용 하시겠습니까? 감속기에서 상태를 수정했을 수 있습니까? – azium
@azium, http://stackoverflow.com/a/34813184/479891에서 다른 질문에 대한 답변을 찾았습니다. "두 가지 다른 http 요청간에 상점을 저장하는 방법은 없습니다." 제가 올바르게 이해한다면, 이것은 "국가가 페이지 뷰/컴포넌트 렌더 사이에 머무를 것"이라는 나의 기대가 맞다는 당신의 의견과 상충되는 것 같습니다. 아마이 질문에서 관찰하고있는 행동이 예상되는 것일까? –
그 대답은 구체적으로 그 수정이 당신이하고있는 것 인 React Router를 사용한다고 말합니다. 클라이언트 측 라우터를 사용할 때 저장소를 구성하는 JavaScript를 다시로드하지 않으므로 여러 경로에 걸쳐 유지됩니다. 문제는 코드의 다른 부분에 있습니다. 어떻게 앱을 제공하고 있습니까? webpack dev에 서버 또는 익스프레스를 통해? 이것은 dev와 prod 모두에서 발생합니까? – azium