当前位置:首页 > 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;
}

实现多级嵌套菜单

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

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>
  );
}

响应式菜单实现

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

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 集成,实现导航功能。

react如何实现菜单

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>
  );
}

分享给朋友:

相关文章

css制作tab菜单

css制作tab菜单

CSS制作Tab菜单的方法 HTML结构 使用无序列表和div容器构建基础结构,列表项为标签页标题,div内放置对应内容块。 <ul class="tab-menu"> <li…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

vue菜单tab实现

vue菜单tab实现

Vue 菜单 Tab 实现方法 使用动态组件切换内容 通过 Vue 的 component 动态组件结合 v-for 渲染菜单项,点击时切换显示内容: <template> <…

vue实现左侧菜单

vue实现左侧菜单

实现左侧菜单的基本结构 在Vue中实现左侧菜单通常需要结合组件化思想和路由功能。使用<el-menu>组件(Element UI)或自定义组件搭配Vue Router是常见方案。 <…

vue如何实现拖拽

vue如何实现拖拽

实现拖拽的基本方法 在Vue中实现拖拽功能通常使用HTML5的Drag and Drop API或第三方库如vuedraggable。以下是两种方法的详细说明。 使用HTML5 Drag and D…

vue路由如何实现

vue路由如何实现

vue路由的实现方法 Vue路由可以通过Vue Router库来实现。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。 安装Vue Router 使用npm或yar…