当前位置:首页 > 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 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

css制作菜单

css制作菜单

CSS 制作菜单的方法 使用 CSS 可以制作多种风格的菜单,包括水平菜单、垂直菜单、下拉菜单等。以下是几种常见的实现方式。 水平菜单 水平菜单通常用于导航栏,可以通过 display: inlin…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

vue如何实现tap

vue如何实现tap

Vue 中实现类似移动端 tap 事件的方法 在 Vue 中可以通过以下几种方式实现类似移动端 tap(轻触)事件的效果: 使用第三方库 安装 v-tap 指令库可以快速实现 tap 事件: np…

h5页面如何实现

h5页面如何实现

实现H5页面的方法 H5页面是基于HTML5技术的网页,通常用于移动端和响应式设计。以下是实现H5页面的关键步骤和技术要点。 基础结构 使用HTML5的DOCTYPE声明作为页面的起始。HTML5简…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…