2016-07-30 68 views
0

我正在使用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; 
+2

你的期望是正确的,我们将需要看到更多的代码。也许你不止一次地调用'createStore'?甚至ReactDom.render不止一次?也许在减速器中修改状态? – azium

+0

@azium,我在http://stackoverflow.com/a/34813184/479891上找到了关于另一个问题的答案,它说:“在两个不同的http请求之间,您的商店如何保存是没有办法的。”如果我理解正确,这似乎与您的评论相冲突,我的期望是正确的,即“状态将保留在页面浏览/组件呈现之间”。也许我在这个问题上观察到的行为是可以预料的? –

+0

这个答案明确表示修正是使用React Router,这就是你正在做的。在使用客户端路由器时,您不会重新加载构建您的商店的JavaScript,因此它会持续存在于路由中。问题在代码中的其他地方。你如何提供应用程序?通过webpack dev服务器还是express?这是否发生在开发和产品? – azium

回答

0

我已经解决了这个问题,将<a>元素替换为从react-router导入的<Link>元素。这不能解决用户手动在地址栏中输入新URL的问题,但在链接情况下解决问题。我相信这实际上是预期的行为。我相信,如果我错了,有人会纠正我。

+1

啊,是的有道理。您可以使用localstorage修复手动输入的url问题(如果您需要支持的话)。如果你这样做,看看redux-persist库。 – azium