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

React Router:点击子路由/about时取消父路由/的active类

解决React Router嵌套路由下父路由链接持续激活的问题

问题核心:React Router v6中NavLink默认采用前缀匹配规则,即只要当前路径以目标路径开头(比如/about以/开头),就会为/的链接添加active类,导致父路由和子路由链接同时高亮。

解决方案1:使用NavLink的end属性(推荐)

在指向根路径/的NavLink上添加end属性,强制完全匹配路径:

// Layout组件中的Navbar部分
import { NavLink, Outlet } from 'react-router-dom';

function Layout() {
  return (
    <div>
      <nav>
        {/* 添加end属性,仅当路径完全为/时激活 */}
        <NavLink to="/" end>首页</NavLink>
        <NavLink to="/about">关于</NavLink>
      </nav>
      <Outlet />
    </div>
  );
}

end属性的作用:当设置该属性后,NavLink只会在当前路径与to的路径完全一致时,才会添加active类,避免前缀匹配导致的父路由误激活。

解决方案2:自定义匹配逻辑(非NavLink场景)

如果使用自定义导航组件而非NavLink,可以通过useLocation钩子手动判断路径是否完全匹配:

import { useLocation, useNavigate } from 'react-router-dom';

function CustomNavLink({ to, children }) {
  const location = useLocation();
  const navigate = useNavigate();
  // 严格判断路径是否完全一致
  const isActive = location.pathname === to;

  return (
    <a
      href="#"
      className={isActive ? 'active' : ''}
      onClick={(e) => {
        e.preventDefault();
        navigate(to);
      }}
    >
      {children}
    </a>
  );
}

// 使用方式
<CustomNavLink to="/">首页</CustomNavLink>
<CustomNavLink to="/about">关于</CustomNavLink>

验证效果

  • 访问/时,仅首页链接显示黄色(active类生效)
  • 访问/about时,仅关于页面链接显示黄色,首页链接恢复默认样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:05:22