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

TypeScript中NavLink使用activeClassName报属性不存在类型错误

报错原因

activeClassName属性不存在的报错和TypeScript配置无关,是react-router-dom v6 及以上版本已经正式移除了activeClassName、activeStyle两个属性,对应的TS类型定义中自然没有这两个属性的声明,调用时就会触发类型错误。

解决方法

方案1:使用v6官方标准写法(推荐)

v6版本中NavLink的className、style属性都支持传入回调函数,回调会接收包含isActive(布尔值,标识当前路由是否匹配激活)的参数对象,根据该值动态拼接类名即可实现和activeClassName完全一致的效果,修改后的代码如下:

import React from "react";
import { NavLink } from "react-router-dom";

import { Container, Selector } from "./styles";

const DefaultHeader: React.FC = () => {
  return (
    <Container>
      <NavLink
        to="/headers"
        className={({ isActive }) => isActive ? "wasd" : undefined}
      >
        <Selector>Headers</Selector>
      </NavLink>
    </Container>
  );
};

export default DefaultHeader;

如果需要同时配置默认类名和激活类名,可以按如下方式编写:

<NavLink
  to="/headers"
  className={({ isActive }) => `nav-link ${isActive ? "wasd" : ""}`.trim()}
>
  菜单文本
</NavLink>

方案2:降级到v5版本兼容旧写法(不推荐)

如果是老项目迁移,不想改动现有NavLink相关代码,可以将react-router-dom降级到v5最终稳定版,该版本原生支持activeClassName属性,自带对应TS类型定义,无需额外配置。
执行对应包管理工具的安装命令即可完成降级:

  • npm用户:npm install react-router-dom@5.3.4
  • yarn用户:yarn add react-router-dom@5.3.4
  • pnpm用户:pnpm add react-router-dom@5.3.4

注意:v5和v6版本的路由API差异较大,降级前请确认项目中其他路由相关代码兼容v5版本规范。

内容的提问来源于stack exchange,提问作者João Batista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:21:19