react-router-dom的Link组件不支持className props原因及NavLink替代可行性
关于className不生效的问题
React Router 官方的 Link 组件本身是完全支持 className 属性的,它是对原生 <a> 标签的轻量封装,所有原生 <a> 支持的属性都会默认透传,官方也明确说明这不是功能Bug。
你遇到的样式不生效问题,通常是以下几种原因导致:
- 你使用的React Router为较旧的非稳定版本,存在属性透传异常的小问题,升级到最新稳定版即可解决
- 你的CSS Modules样式优先级低于全局的
<a>标签样式,导致被覆盖,换成NavLink后生效,是因为NavLink生成的类名优先级更高,或者你编写的样式规则恰好适配了NavLink的默认类名逻辑 - 你导入的
Link来自其他第三方组件库的二次封装版本,这类封装版本可能做了属性过滤,没有透传className属性
关于NavLink替代的合理性
你当前的场景下用NavLink替代Link没有任何不妥:
NavLink是Link的扩展组件,完全兼容Link的所有属性和功能,原有跳转逻辑不会受到任何影响- 它仅比
Link多了路由激活态的匹配逻辑,会自动给处于激活状态的链接添加active类名,如果你不需要激活态样式,这部分逻辑的性能开销极低,普通业务场景完全感知不到 - 如果后续你需要给当前页面对应的链接添加高亮效果,用
NavLink反而更加方便,不需要自己手写路由匹配的相关逻辑
内容的提问来源于stack exchange,提问作者Maran Sowthri
相关产品推荐
相关产品推荐

