React-router:即使路由发生变化,也不会在安装后卸载路由上的组件

时间:2017-08-28 10:42:45

标签: reactjs react-router react-redux react-router-dom

我有一个React应用程序声明了一些路由:

     <Switch>
      <Route exact path={'/'} render={this.renderRootRoute} />
      <Route exact path={'/lostpassword'} component={LostPassword} />
      <AuthenticatedRoute exact path={'/profile'} component={Profile} session={session} redirect={'/'} />
      <AuthenticatedRoute path={'/dashboard'} component={Dashboard} session={session} redirect={'/'} />
      <AuthenticatedRoute path={'/meeting/:meetingId'} component={MeetingContainer} session={session} redirect={'/'} />
      <Route component={NotFound} />
    </Switch>

AuthenticatedRoute是一个用于检查会话的愚蠢组件,可以调用<Route component={component} /><Redirect to={to} />,但最后会调用component方法。

基本上每个组件在路由更改时安装/卸载。我希望保留{strong>除了之外的Dashboard路线,它可以做很多事情,并且我希望不在仪表板上卸载(让&#39;如果你到达会议页面,你不需要安装你的仪表板)但是一旦你装载了你的仪表板,当你进入你的个人资料页面,会议或其他什么时,当你回到你的仪表板时,该组件会不必再次装载。

我在React-router doc上读到render或者孩子可能是解决方案,而不是组件,但是我们可以将路由与子项和其他组件混合使用吗?我尝试过很多东西而且从未达到我想要的效果,即使使用renderchildren,我的仪表板组件仍在挂载/卸载。

感谢您的帮助

1 个答案:

答案 0 :(得分:9)

electron-rebuild组件只渲染单条路线,最早的匹配获胜。由于npm run electron-rebuild组件位于其中,因此只要其他路由匹配,就会卸载它。将此Switch移到外面,它将按预期与DashboardRoute一起使用。