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

React Router Dom isActive属性异常:迁移Vite后根路径始终激活

解决React Router根路径NavLink始终激活的问题

迁移到Vite后,切换到/projects路由时,根路径/的NavLink的isActive始终为true,导致两个导航同时高亮,且未修改路由相关代码、此前在CRA环境下正常。

问题原因

这个问题和Vite无关,本质是react-router-dom的NavLink默认匹配规则导致的:NavLink默认采用部分匹配,/会匹配所有以/开头的路径(比如/projects、/contact),所以只要不在404页面,根路径的NavLink都会被判定为激活状态。

解决方案

给根路径的NavLink添加end属性,强制开启完全匹配模式,只有当当前路径严格等于/时才会激活。

修改NavLinks.jsx代码如下:

import { nanoid } from "nanoid";
import { NavLink } from "react-router-dom";
import { navLinks } from "../../data/links";

const NavLinks = ({ closeSidebar }) => {
  return (
    <ul className="nav-links">
      {navLinks.map((link) => {
        const { text, url } = link;
        return (
          <li key={nanoid()}>
            <NavLink
              to={url}
              onClick={closeSidebar}
              // 仅根路径添加end属性,强制完全匹配
              end={url === '/'}
              className={({ isActive }) => {
                return isActive ? "nav-link active" : "nav-link";
              }}>
              {text}
            </NavLink>
          </li>
        );
      })}
    </ul>
  );
};

export default NavLinks;

补充说明

  • end属性是react-router-dom v6版本的特性,对应v5及以前版本的exact属性。从你的代码使用Routes组件来看,应该是v6版本,直接用end即可。
  • 添加该属性后,切换到/projects或/contact时,根路径的NavLink会自动取消激活状态,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:01:05