当前位置: 首页 > 知识库问答 >
问题:

React-router:一旦挂载,即使路由更改,也不要卸载路由上的组件

越学义
2023-03-14

我有一个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是检查会话的哑组件,调用

其中基本上每个组件在路线改变时被安装/卸载。我想保留这个方面,除了做很多事情的Dashboard路由,我想卸载一次,而不是在仪表板上(假设你到达一个会议页面,你不需要挂载仪表板但是一旦你加载了一次你的仪表板,当你进入你的个人资料页面,一次会议或其他什么,当你回到你的仪表板上时,组件不必再次加载。

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

多谢你的帮忙


共有1个答案

穆睿才
2023-03-14

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

 类似资料:
  • 在标记为副本之前,请仔细阅读此内容,我向您保证,我已经阅读并尝试了每个人在stackoverflow和github上提出的关于此问题的所有建议。 我在我的应用程序中有一条路线,如下所示; route rendering呈现打开用户角色的组件,并基于该角色惰性加载正确的Routes组件,Routes组件呈现主页的开关。简化后,如下所示。 然后是路由组件 因此,问题是每当用户从/导航到/秒等...应用

  • 问题内容: 我必须根据浏览历史实现一些业务逻辑。 我想做的是这样的: URL更新后,有什么方法可以接收来自react-router的回调吗? 问题答案: 尝试检测路线变化时,可以使用功能。考虑到您正在使用,请用HOC 包装您的组件以访问道具。 返回一个函数。您将使用它来收听。 您可以像这样配置路线 index.js 然后在 AppContainer.js中 从历史文档: 您可以使用收听当前位置的更

  • 我已经设置了react路由器和一个组件来呈现一些页面组件。我的所有组件都呈现相同的布局(目前,稍后将是参数化的)。我的页面组件将内容“注入”到布局中,因此我不能让布局组件包装我的外部开关组件。它必须用作页面组件中的子级。 即使最终的html呈现与布局框架相同(它仅在布局的插槽部分内不同),react也会卸载并重新装载整个布局树。 我能理解重新渲染整棵树的反应。React会看到不同的顶部组件(每个位

  • 我正在使用React-Router开发一个react应用程序。我有一个项目页面,其url如下: 当项目组件加载时,我从componentDidMount事件触发该项目的数据请求。我现在遇到了一个问题,如果我直接在两个项目之间切换,那么只有id像这样更改... componentDidMount不会再次触发,因此不会刷新数据。是否有另一个生命周期事件我应该用来触发我的数据请求或一个不同的策略来解决这

  • 我试图路由到一个类组件,但它给我一个错误。当我将组件更改为功能性组件时,路由就开始工作了。如何路由到类组件? 我刚开始使用React-Router。我首先有一个要路由到的功能组件。但是一旦我意识到组件需要是一个类,我就把它更改为一个类,现在路由显示 “无法获取/探索/单词”。

  • 自动挂载路由 注意是next版本,我们用的是koa2 $ npm install --save mount-koa-routes@next app.js里修改如下 修改1 var routes = require('./routes/index'); var users = require('./routes/users'); 改为 const mount = require('mount-k