我正在开发React/Redux/Thunk/Rect Router应用程序,每次组件渲染时,每个reducer的状态似乎都意外地恢复到默认状态。
例如:
我浏览到主页路由,呈现主页组件,并正确设置了状态-新状态在loggerMiddleware的输出中显示为预期状态,应用程序也按预期工作。
然而,当我浏览到另一个路由并呈现EventPage组件时,状态就好像是空的/默认的——mapStateToProps中的state
参数只是一个空对象的列表,就好像我看到的是组合教育器的默认输出。我在loggerMiddleware输出中看到了同样的东西。类似地,当我浏览回主页组件时,状态再次为空/默认。
我的期望是,状态将保持在页面视图/组件呈现之间。这是正确的吗?
有问题的应用程序的一些摘录,以防它有助于识别我正在犯的任何错误-很高兴提供更多:
事件页面和主页组件/容器的底部:
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;
我已经解决了这个问题,将<a>
元素替换为从react路由器导入的<Link>
元素。这并不能解决用户在地址栏中手动输入新URL的问题,但确实解决了链接的问题。我相信这其实是意料之中的行为。如果我错了,我相信有人会纠正我的。