You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router访问嵌套路由时如何保持主导航激活状态?

React Router嵌套路由下保持主导航激活状态的解决方法

核心问题原因

你的主导航NavLink添加了exact属性,这会让它仅在路径完全匹配时才触发激活状态。当跳转到嵌套路由/assets-list/asset/1时,路径与/assets-list并非完全一致,所以激活类会被移除。另外你之前尝试嵌套路由失败,是因为主路由也加了exact,导致访问嵌套路由时主路由不匹配,子路由无法渲染。

具体解决步骤

1. 移除主导航NavLink的exact属性

保留首页的exact避免其他路由误激活,其余导航项去掉exact,让NavLink匹配所有以目标路径开头的路由:

<ul className={classes["SideNavigation--navigation-items"]}>
  <h1>LOGO</h1>
  <li>
    <NavLink to={`${process.env.PUBLIC_URL}/`} exact>Overview</NavLink>
  </li>
  <li>
    <NavLink to={`${process.env.PUBLIC_URL}/assets-list`}>Ativos</NavLink>
  </li>
  <li>
    <NavLink to={`${process.env.PUBLIC_URL}/users-list`}>Usuários</NavLink>
  </li>
  <li>
    <NavLink to={`${process.env.PUBLIC_URL}/units-list`}>Unidades</NavLink>
  </li>
</ul>

2. 调整路由结构,正确配置嵌套路由

去掉主路由的exact属性,并确保主组件AssetsList中渲染子路由的内容:

修改后的路由配置:

<HashRouter>
  <Layout>
    <Switch>
      <Route path={`${process.env.PUBLIC_URL}/assets-list`} component={AssetsList}>
        <Route path={`${process.env.PUBLIC_URL}/assets-list/asset/:id`} component={AssetComponent} />
      </Route>
      <Route path={`${process.env.PUBLIC_URL}/users-list`} component={UsersList} />
      <Route path={`${process.env.PUBLIC_URL}/units-list`} component={UnitsList} />
      <Route path={`${process.env.PUBLIC_URL}/`} exact component={Overview} />
    </Switch>
  </Layout>
</HashRouter>

在AssetsList组件中添加子路由渲染入口:

function AssetsList(props) {
  return (
    <div>
      {/* AssetsList原有业务内容 */}
      {props.children} {/* 渲染嵌套的AssetComponent组件 */}
    </div>
  );
}

3. 可选:自定义激活匹配规则(精细控制场景)

如果不想完全移除exact,可以通过isActive属性自定义激活逻辑:

<NavLink 
  to={`${process.env.PUBLIC_URL}/assets-list`}
  isActive={(match, location) => {
    // 只要路径以/assets-list开头就激活
    return location.pathname.startsWith(`${process.env.PUBLIC_URL}/assets-list`);
  }}
>
  Ativos
</NavLink>

完成以上调整后,访问/assets-list及其所有嵌套路由时,主导航的Ativos项都会保持激活状态。

内容的提问来源于stack exchange,提问作者Berg_Durden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:40:45