Reactjs React路由器:一旦挂载,永远不要卸载路由上的组件,即使路由发生变化

Reactjs React路由器:一旦挂载,永远不要卸载路由上的组件,即使路由发生变化,reactjs,react-router,react-redux,react-router-dom,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'} componen

我有一个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>

或者子级可能是解决方案,而不是组件,但我们可以将路由与子级混合,将其他路由与组件混合吗?我尝试了很多事情,但从未达到我想要的效果,即使使用
渲染
子项
,我的仪表板组件仍在安装/卸载


感谢您的帮助

开关
组件只渲染一条路线,最早的比赛获胜。由于
仪表板
组件位于仪表板内部,因此只要另一个路由匹配,它就会被卸载。将此
路由
移动到外部,它将按预期与
渲染
子级

一起工作。当路由位于
交换机
内部时,仅渲染第一条匹配的
路由
,其他路由将因此卸载。你应该把仪表板从开关上移开,然后试试..@hazardous嗨,你说得对!需要一些调整,但它的工作!你想把它作为一个真实的答案发布,还是我应该用修改过的代码来回答自己?你为什么要在河上战斗?如果路由发生变化,任何组件都将不再是UI的一部分。这就是React的工作原理,以及它应该如何工作。所以,如果您需要数据独立于装载状态进行持久化,只需。。。在组件外部保持它的持久性?您在JS land,在您
require()
所在的对象(以及缓存的引用)中维护仪表板组件外部的仪表板状态,并在
component期间让仪表板组件引导将基于该数据装载。@Mike'Pomax'Kamermans我完全同意,我一般都是这样做的。但是关于我的仪表板:a)我有带分页的HOC组件和具有自己状态的东西,这些东西很难/脏地存储在仪表板状态b)我有实时为仪表板提供信息的推送事件。我发现在挂载组件后,保持组件始终处于活动状态更容易(仅针对该页面),从而减少了在外部持久保存复杂状态和事件挂钩的糟糕代码it@Mike“Pomax”Kamermans我知道这是一个非常古老的评论,但这个建议充其量只是误导——我希望新来者不要这么做。组件可以有自己的状态是有原因的,因为一般来说,人们希望尽可能地保持状态的局部性。为什么整个应用程序都应该知道某些组件的一些次要实现细节?至于与河流作战,这不是React的工作方式,而是React路由器的工作方式,甚至不是那样(见公认答案)。所以,是的,保持组件安装是一种完全有效的技术,OP询问如何做到这一点是正确的。这是一个救世主的答案。但有几件事<代码>渲染
道具对我不起作用。只有
儿童
道具起作用。对于需要安装的组件,您必须在其
render()
函数中有条件地呈现内容,检查
匹配属性是否未定义。