当前位置:首页 > React

react 导航active实现

2026-01-26 20:43:58React

实现 React 导航 Active 状态的方法

使用 React Router 的 NavLink 组件
React Router 提供了 NavLink 组件,可以自动为当前匹配的路由添加 active 类名。通过 activeClassNameclassName 函数自定义样式:

import { NavLink } from 'react-router-dom';

<NavLink 
  to="/home" 
  className={({ isActive }) => isActive ? 'active' : ''}
>
  Home
</NavLink>

手动判断路径匹配
通过 useLocation 获取当前路径,与导航项的路径比较后动态添加类名:

import { Link, useLocation } from 'react-router-dom';

const location = useLocation();
<Link 
  to="/about" 
  className={location.pathname === '/about' ? 'active' : ''}
>
  About
</Link>

使用 CSS Modules 或 Styled Components
结合 CSS Modules 或样式库实现高亮效果:

// CSS Modules
import styles from './Nav.module.css';
<NavLink to="/contact" className={({ isActive }) => isActive ? styles.active : ''} />

// Styled Components
const StyledLink = styled(NavLink)`
  &.active { color: red; }
`;

自定义 Hook 封装逻辑
抽象 active 判断逻辑为可复用的 Hook:

const useActivePath = (path) => {
  const location = useLocation();
  return location.pathname === path;
};

const isActive = useActivePath('/products');
<Link to="/products" className={isActive ? 'active' : ''} />

注意事项

react 导航active实现

  • 精确匹配需配置 end 属性:<NavLink to="/" end>
  • 嵌套路由需处理路径前缀匹配逻辑
  • 动态路由需使用 pathname.startsWith() 等方法判断

标签: reactactive
分享给朋友:

相关文章

react如何测试

react如何测试

React 测试方法 React 应用的测试通常涉及组件测试、集成测试和端到端测试。以下是常用的测试工具和方法: Jest Jest 是 Facebook 开发的 JavaScript 测试框架,适…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…