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

如何为带条件CSS类的React NavLink添加额外CSS类?

在React Router的NavLink中添加固定类和条件类的正确写法

你之前的写法错误在于把条件判断函数放在了模板字符串里,这会导致React直接把函数代码当成字符串渲染,而不是执行函数返回对应的类名。

单个NavLink的正确写法

让className的回调函数直接返回固定类 + 条件类的组合字符串:

<NavLink 
  to='property' 
  className={({ isActive }) => 
    `${isActive ? "property-info-nav-active" : "property-info-nav-link"} additional-class`
  }
>
  Property
</NavLink>

优化多NavLink的重复逻辑

你的完整代码里多个NavLink用了相同的激活类判断逻辑,可以抽成复用函数减少冗余:

import { NavLink, Outlet } from "react-router-dom"
import "../index.css";

const LandlordLayout = () => {
  // 统一处理激活状态类名,支持传入额外类
  const getNavLinkClass = ({ isActive }, extraClass = "") => {
    const activeClass = isActive ? "landlord-nav-link-active" : "landlord-nav-link";
    return `${activeClass} ${extraClass}`;
  };

  return (
    <>  
        <div className="landlord-properties-menu"> 
            <NavLink to="." end className={(props) => getNavLinkClass(props, "extra-dashboard-class")}>Dashboard</NavLink>       
            <NavLink to="income" className={getNavLinkClass}>Income</NavLink>        
            <NavLink to="properties" className={(props) => getNavLinkClass(props, "extra-properties-class")}>Properties</NavLink>                 
            <NavLink to="reviews" className={getNavLinkClass}>Review</NavLink>                
        </div>
        <Outlet/>
    </>
  )
}

export default LandlordLayout
  • 不需要额外类时,直接传className={getNavLinkClass}即可;需要额外类时,通过回调把状态props和额外类传给函数。

另一种简洁写法

如果场景简单,也可以先写基础类,再根据激活状态追加高亮类:

<NavLink 
  to="properties" 
  className={({ isActive }) => 
    `landlord-nav-link ${isActive ? "landlord-nav-link-active" : ""} extra-class`
  }
>
  Properties
</NavLink>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:43:14