当前位置:首页 > React

react如何实现菜单

2026-01-16 09:19:22React

使用 React 实现菜单的方法

使用状态管理控制菜单显示/隐藏

通过 useState 管理菜单的展开和收起状态,结合点击事件切换状态。

import { useState } from 'react';

function Menu() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>Toggle Menu</button>
      {isOpen && (
        <ul>
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
        </ul>
      )}
    </div>
  );
}

使用 CSS 实现动画效果

通过 CSS 过渡或动画让菜单的展开/收起更平滑。

.menu {
  transition: max-height 0.3s ease-out;
  max-height: 0;
  overflow: hidden;
}

.menu.open {
  max-height: 500px;
}

实现多级嵌套菜单

通过递归组件实现无限层级菜单结构。

react如何实现菜单

function MenuItem({ item }) {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <li>
      <div onClick={() => setIsOpen(!isOpen)}>
        {item.name}
        {item.children && <span>{isOpen ? '−' : '+'}</span>}
      </div>
      {item.children && isOpen && (
        <ul>
          {item.children.map((child) => (
            <MenuItem key={child.id} item={child} />
          ))}
        </ul>
      )}
    </li>
  );
}

使用第三方库简化开发

考虑使用成熟的 React 菜单库如 react-contexifyreact-menu

npm install react-contexify
import { Menu, Item, Separator } from 'react-contexify';

function App() {
  return (
    <Menu id="simple">
      <Item onClick={() => alert('Clicked')}>Action 1</Item>
      <Separator />
      <Item disabled>Disabled Action</Item>
    </Menu>
  );
}

响应式菜单实现

结合媒体查询和状态管理,为不同屏幕尺寸提供适配的菜单样式。

react如何实现菜单

const [isMobile, setIsMobile] = useState(window.innerWidth < 768);

useEffect(() => {
  const handleResize = () => {
    setIsMobile(window.innerWidth < 768);
  };
  window.addEventListener('resize', handleResize);
  return () => window.removeEventListener('resize', handleResize);
}, []);

无障碍访问优化

确保菜单符合 WAI-ARIA 标准,支持键盘导航和屏幕阅读器。

<div role="menu" aria-orientation="vertical">
  <button 
    aria-haspopup="true" 
    aria-expanded={isOpen}
    onClick={toggleMenu}
  >
    Menu
  </button>
  {isOpen && (
    <ul role="menubar">
      <li role="menuitem">Option 1</li>
    </ul>
  )}
</div>

与路由集成

将菜单项与 React Router 集成,实现导航功能。

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

function NavMenu() {
  return (
    <nav>
      <ul>
        <li><Link to="/">Home</Link></li>
        <li><Link to="/about">About</Link></li>
      </ul>
    </nav>
  );
}

分享给朋友:

相关文章

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的几种方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,通过 draggable 属性和相关事件实现拖动功能。 <template> &…

vue如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 O…

css制作菜单

css制作菜单

水平菜单制作 使用display: inline-block或flexbox布局创建水平菜单。设置list-style: none移除默认列表样式,添加padding和margin调整间距。 <…

vue实现导航菜单

vue实现导航菜单

Vue 实现导航菜单的方法 基础路由导航实现 在 Vue 项目中,使用 vue-router 可以轻松实现导航菜单功能。首先安装并配置路由: npm install vue-router 在 rou…

css制作横向菜单

css制作横向菜单

使用浮动(Float)实现横向菜单 将菜单项的 display 属性设置为 float: left,使列表项横向排列。清除浮动避免影响后续布局。 ul.horizontal-menu { lis…