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

在React.js中为选中的标签页添加Active CSS类

给React Router标签页添加Active类的解决方案

看起来你是在用React Router构建步骤导航栏,想要给当前激活的标签页添加active CSS类对吧?没问题,React Router其实提供了专门的组件来处理这种导航高亮需求——NavLink,它是Link的增强版,自带激活状态的判断逻辑。

下面给你两种常用的实现方式:

方式一:直接给NavLink添加Active类

把你代码里的Link替换成NavLink,然后通过activeClassName属性指定激活时的类名,这样当路由匹配时,NavLink会自动加上这个类:

<ul>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/personal-information`}
      activeClassName="active"
    >
      You <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/content`}
      activeClassName="active"
    >
      Content <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/profile-information`}
      activeClassName="active"
    >
      Profile <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/rewards`}
      activeClassName="active"
    >
      Rewards <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/goals`}
      activeClassName="active"
    >
      Goals <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/thanks`}
      activeClassName="active"
    >
      Thanks <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/payment`}
      activeClassName="active"
    >
      Payment <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  <li className="step">
    <NavLink 
      to={`${this.props.match.url}/launch`}
      activeClassName="active"
    >
      Launch!
    </NavLink>
  </li>
</ul>

如果你的项目用的是React Router v6,语法略有变化,activeClassName被整合到className的函数形式里了:

<NavLink
  to={`${this.props.match.url}/personal-information`}
  className={({ isActive }) => `step-link ${isActive ? 'active' : ''}`}
>
  You <i className="fa fa-long-arrow-right"></i>
</NavLink>

方式二:给外层li标签添加Active类

如果你希望把active类加到<li>而不是<NavLink>上,可以利用NavLink的状态回调来判断,动态设置li的className:

<ul>
  {/* 方式1:通过路径匹配判断 */}
  <li className={`step ${this.props.location.pathname.includes('personal-information') ? 'active' : ''}`}>
    <Link to={`${this.props.match.url}/personal-information`}>
      You <i className="fa fa-long-arrow-right"></i>
    </Link>
  </li>
  {/* 方式2:用NavLink的isActive回调更精准 */}
  <li>
    <NavLink 
      to={`${this.props.match.url}/content`}
      className={({ isActive }) => `step ${isActive ? 'active' : ''}`}
    >
      Content <i className="fa fa-long-arrow-right"></i>
    </NavLink>
  </li>
  {/* 其他标签页同理修改 */}
</ul>

小提示:

  • 记得从react-router-dom中导入NavLink(v5/v6导入路径一致:import { NavLink } from 'react-router-dom')
  • 如果需要精确匹配路由(比如避免/personal-information和/personal-information/edit同时被激活),v5可以加exact属性,v6则用end属性

这样修改后,当你点击对应的标签页时,匹配的元素就会自动带上active类,你就可以用CSS来设置激活状态的样式啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:27