我正在使用React/Redux/Thunk/React Router应用程序,并且每次组件呈现时,状态都会意外恢复为每个还原器的默认状态。每次组件呈现时,状态似乎都恢复为默认状态
例如:
我浏览到主页的路由,渲染网页组件,并且状态设置正确 - 新的状态显示为预期从loggerMiddleware输出和应用按预期工作。
但是,当我然后浏览到另一条路线并呈现EventPage组件时,就好像状态为空/默认 - mapStateToProps中的参数state
仅仅是一个空对象的列表,就好像我看到默认输出从combinereducers。我在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;
你的期望是正确的,我们将需要看到更多的代码。也许你不止一次地调用'createStore'?甚至ReactDom.render不止一次?也许在减速器中修改状态? – azium
@azium,我在http://stackoverflow.com/a/34813184/479891上找到了关于另一个问题的答案,它说:“在两个不同的http请求之间,您的商店如何保存是没有办法的。”如果我理解正确,这似乎与您的评论相冲突,我的期望是正确的,即“状态将保留在页面浏览/组件呈现之间”。也许我在这个问题上观察到的行为是可以预料的? –
这个答案明确表示修正是使用React Router,这就是你正在做的。在使用客户端路由器时,您不会重新加载构建您的商店的JavaScript,因此它会持续存在于路由中。问题在代码中的其他地方。你如何提供应用程序?通过webpack dev服务器还是express?这是否发生在开发和产品? – azium