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

React Router v6.14 NavLink移除className后仍生效的异常求助

React Router 6.14 NavLink默认active类名问题解析

问题原因

React Router 6.x(含6.14版本)的NavLink组件自带默认行为:当链接处于激活状态时,会自动给元素添加active类名。你之前手动通过className函数实现的类名切换逻辑,和组件默认行为的效果完全一致。移除自定义className属性后,组件的默认激活类逻辑仍在运行,所以激活的链接依然会被加上active类,导致CSS规则持续生效。

解决办法

  • 完全禁用默认激活类:
    若不需要激活状态样式,除删除CSS规则外,可显式设置className覆盖默认行为:

    <nav>
        <NavLink className={() => ''} to='/host'>Host</NavLink>
        <NavLink className={() => ''} to='/about'>About</NavLink>
        <NavLink className={() => ''} to='/vans'>Vans</NavLink>
    </nav>
    
  • 自定义激活类名:
    想保留激活状态但替换默认类名,可在className函数中返回自定义类(此时组件不会再添加默认的active类):

    <nav>
        <NavLink className={({isActive}) => isActive ? 'custom-active' : ''} to='/host'>Host</NavLink>
        <NavLink className={({isActive}) => isActive ? 'custom-active' : ''} to='/about'>About</NavLink>
        <NavLink className={({isActive}) => isActive ? 'custom-active' : ''} to='/vans'>Vans</NavLink>
    </nav>
    

    同时将CSS中的.active选择器改为.custom-active。

  • 直接通过style控制样式:
    绕开类名,用style属性直接定义激活状态样式:

    <nav>
        <NavLink 
            style={({isActive}) => ({
                color: isActive ? '#161616' : '',
                textDecoration: isActive ? 'underline' : ''
            })} 
            to='/host'
        >Host</NavLink>
        <NavLink 
            style={({isActive}) => ({
                color: isActive ? '#161616' : '',
                textDecoration: isActive ? 'underline' : ''
            })} 
            to='/about'
        >About</NavLink>
        <NavLink 
            style={({isActive}) => ({
                color: isActive ? '#161616' : '',
                textDecoration: isActive ? 'underline' : ''
            })} 
            to='/vans'
        >Vans</NavLink>
    </nav>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:45:04