在 React Router 中,NavLink组件默认会在活动链接上添加 active类名。如果你想自定义这个类名,可以通过以下方式实现:
import { NavLink } from 'react-router-dom';
// 使用 activeClassName 指定自定义类名
<NavLink
to="/about"
activeClassName="my-active-class"
>
About
</NavLink>
在 React Router v6 中,activeClassName已被移除,改为使用 className的回调函数形式:
import { NavLink } from 'react-router-dom';
// v6 使用 className 回调函数
<NavLink
to="/about"
className={({ isActive }) => isActive ? "my-active-class" : ""}
>
About
</NavLink>
你也可以直接内联样式:
<NavLink
to="/about"
style={({ isActive }) => ({
color: isActive ? "red" : "blue",
fontWeight: isActive ? "bold" : "normal"
})}
>
About
</NavLink>
如果你想全局修改默认的 active 类名,可以在创建路由器时配置:
import { createBrowserRouter } from 'react-router-dom';
const router = createBrowserRouter(routes, {
future: {
// 全局配置 active 类名
v7_normalizeFormMethod: true,
// 其他配置...
}
});
在 v6 中,exact属性已被移除,匹配规则更加智能
end属性可以用于匹配路径末尾
多个 NavLink 可以同时处于 active 状态,如果它们的路径都匹配当前路由
选择哪种方法取决于你使用的 React Router 版本和你的具体需求。
这个 TypeScript 错误通常在使用 React Router 的 NavLink组件时出现,因为 TypeScript 无法自动推断 isActive参数的类型。以下是几种解决方案:
import { NavLink } from 'react-router-dom';
<NavLink
to="/about"
className={({ isActive }: { isActive: boolean }) =>
isActive ? "my-active-class" : ""
}
>
About
</NavLink>
import { NavLink, NavLinkProps } from 'react-router-dom';
interface NavLinkCustomProps {
isActive: boolean;
}
<NavLink
to="/about"
className={({ isActive }: NavLinkCustomProps) =>
isActive ? "my-active-class" : ""
}
>
About
</NavLink>
React Router v6 提供了 NavLinkProps类型:
import { NavLink, NavLinkProps } from 'react-router-dom';
<NavLink
to="/about"
className={({ isActive }: NavLinkProps['className']) =>
isActive ? "my-active-class" : ""
}
>
About
</NavLink>
在项目的类型声明文件中(如 react-router.d.ts):
import 'react-router-dom';
declare module 'react-router-dom' {
interface NavLinkProps {
className?: string | ((props: { isActive: boolean }) => string);
}
}
如果其他方法都不适用,可以使用类型断言:
<NavLink
to="/about"
className={({ isActive } : any) =>
isActive ? "my-active-class" : ""
}
>
About
</NavLink>
在 React Router 的 NavLink组件中,如果你想在 className回调函数中添加多个 CSS 类名,有几种方法可以实现:
<NavLink
to="/about"
className={({ isActive }) =>
`base-class ${isActive ? "active-class1 active-class2" : ""}`
}
>
About
</NavLink>
<NavLink
to="/about"
className={({ isActive }) =>
[
"base-class",
...(isActive ? ["active-class1", "active-class2"] : [])
].join(" ")
}
>
About
</NavLink>
react自定义NavLink 的 active 类名
发布时间:2025-9-14
分类:技术
标签: react 教程 博客