修改Home.tsx的内容:将主菜单的内容进行抽离,然后单独引入=>MainMenu

import { Breadcrumb, Layout, Menu } from 'antd';
import React, { useState } from 'react';
import { Outlet } from 'react-router-dom';
import MainMenu from "@/components/MainMenu";
const { Header, Content, Footer, Sider } = Layout; const View: React.FC = () => {
const [collapsed, setCollapsed] = useState(false); return (
<Layout style={{ minHeight: '100vh' }}>
{/* 左边侧边栏 */}
<Sider collapsible collapsed={collapsed} onCollapse={value => setCollapsed(value)}>
<div className="logo" />
<MainMenu></MainMenu>
</Sider>
{/* 右边的内容 */}
<Layout className="site-layout">
{/* 头部 */}
<Header className="site-layout-background" style={{ paddingLeft: '16px' }} >
<Breadcrumb style={{ lineHeight: '64px' }}>
<Breadcrumb.Item>User</Breadcrumb.Item>
<Breadcrumb.Item>Bill</Breadcrumb.Item>
</Breadcrumb>
</Header>
{/* 右边内容-白色底的盒子 */}
<Content style={{ margin: '16px 16px 0' }} className="site-layout-background">
{/* 窗口部分 */} <Outlet />
</Content>
{/* 右边底部 */}
<Footer style={{ textAlign: 'center', padding: 0, lineHeight: '48px' }}>Ant Design 2018 Created by Ant UED</Footer>
</Layout>
</Layout>
);
}; export default View;

在components文件夹中进行抽离Menu:

import {
DesktopOutlined,
FileOutlined,
PieChartOutlined,
TeamOutlined,
UserOutlined,
} from '@ant-design/icons';
import type { MenuProps } from 'antd';
import React, { useState } from 'react';
import { Menu } from 'antd';
import { To, useNavigate } from 'react-router-dom'; type MenuItem = Required<MenuProps>['items'][number]; function getItem(
label: React.ReactNode,
key: React.Key,
icon?: React.ReactNode,
children?: MenuItem[],
): MenuItem {
return {
key,
icon,
children,
label,
} as MenuItem;
} const items: MenuItem[] = [
getItem('Option 1', '/page1', <PieChartOutlined />),
getItem('Option 2', '/page2', <DesktopOutlined />),
getItem('User', 'page3', <UserOutlined />, [
getItem('Tom', '3'),
getItem('Bill', '4'),
getItem('Alex', '5'),
]),
getItem('Team', 'page4', <TeamOutlined />, [getItem('Team 1', '6'), getItem('Team 2', '8')]),
getItem('Files', 'page5', <FileOutlined />),
]; // 组件内部
const Comp: React.FC = () => { const navigateTo = useNavigate(); const menuClick = (e: { key: String }) => {
console.log('点击了菜单', e.key);
// 点击菜单就跳转到对应的路由 编程式导航跳转,利用到一个Hook
navigateTo(e.key as To)
} const [openKeys, setOpenKeys] = useState(['']); const handleoOpenChange = (keys: string[]) => {
// keys是一个数组,记录了当前哪一项是展开的,使用key来进行记录
// 展开才菜单的时候就会执行这里的代码
// 把这个数组修改为最后一项,因为只要一项是展开的,就是我刚刚点击的那一项
setOpenKeys([keys[keys.length - 1]])
console.log("@展开的项" + keys);
}
return (
<Menu
theme="dark"
defaultSelectedKeys={['/page1']}
// 处理菜单展开和回收的方法
onOpenChange={handleoOpenChange}
mode="inline"
// items 就是菜单项的数据
items={items}
onClick={menuClick}
// 当前菜单展开项的key数组
openKeys={openKeys}
/>
)
} export default Comp;

React后台管理系统09 菜单组件的抽取的更多相关文章

  1. React后台管理系统-添加商品组件

    引入了CategorySelector 二级联动组件.FileUploader图片上传组件和RichEditor富文本编辑组件 import React from 'react'; import MU ...

  2. React后台管理系统- rc-pagination分页组件封装

    1.用户列表页面使用的rc-pagination分页组件 Github地址: https://github.com/react-component/pagination 2.安装 cnpm insta ...

  3. React后台管理系统-首页Home组件

    1.Home组件要显示用户总数.商品总数和订单总数,数据请求后端的 /manage/statistic/base_count.do接口,返回的是 this.state = {            u ...

  4. 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件

    实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...

  5. 【共享单车】—— React后台管理系统开发手记:主页面架构设计

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  6. react后台管理系统路由方案及react-router原理解析

        最近做了一个后台管理系统主体框架是基于React进行开发的,因此系统的路由管理,选用了react-router(4.3.1)插件进行路由页面的管理配置. 实现原理剖析 1.hash的方式   ...

  7. react 侧栏二级菜单组件

    侧边栏菜单组件 component 下新建menu文件,menu下建index.jsx和subitem.jsx index.jsx import React, { Component } from ' ...

  8. 【共享单车】—— React后台管理系统开发手记:UI菜单各个组件使用(Andt UI组件)

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  9. 《React后台管理系统实战 :三》header组件:页面排版、天气请求接口及页面调用、时间格式化及使用定时器、退出函数

    一.布局及排版 1.布局src/pages/admin/header/index.jsx import React,{Component} from 'react' import './header. ...

  10. 《React后台管理系统实战 :二》antd左导航:cmd批量创建子/目录、用antd进行页面布局、分离左导航为单独组件、子路由、动态写左导航、css样式相对陷阱

    一.admin页面布局及路由创建 0)cmd批量创建目录及子目录 //创建各个目录,及charts和子目录bar md home category product role user charts\b ...

随机推荐

  1. Helm 安装 Kubernetes 监控套件

    Helm 安装 Grafana Prometheus Altermanager 套件 安装helm # 安装helm工具 curl -fsSL -o get_helm.sh https://raw.g ...

  2. [工具/IDE]IDEA常用效率插件

    0 代码规范性检查 Alibaba Java Coding Guidelines 1 maven Maven Helper / Maven Wrapper support 2 mybatis Free ...

  3. Anaconda 安装 PyTorch 和 DGL

    安装 PyTorch Anaconda 是 PyTorch 官方推荐的包管理工具,它会帮助安装所有的依赖项.当使用 conda 安装的时候,可能会出现下载过慢的问题,需要更换清华源来代替默认的cond ...

  4. ORA-19870: error while restoring backup piece 数据库恢复报错

    问题描述:用备份进行DG恢复,恢复过程中报错ORA-19870: error while restoring backup piece /backup/db_BJCCORA_20180724_02t8 ...

  5. python移动同名文件

    import os import shutil def split_name(file): file_name, _ = file.split('.') return file_name def mo ...

  6. 2023年成都.NET线下技术沙龙活动即将到来!

    MASA技术团队联合成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得. 本场沙龙 ...

  7. 2023成都.NET线下技术沙龙圆满结束

    2023年4月15日周六,由MASA技术团队和成都.NET俱乐部共同主办的2023年成都.NET线下技术沙龙活动在成都市世纪城新会展中心知域空间举行,共计报名人数90多人,实际到场60多人,13:30 ...

  8. linux下防火墙与SELinux状态与关闭

    linux下防火墙与SELinux状态与关闭 在使用ftp命令以及wget命令测试两台linux机器之间ftp下载是否正常,虽然关闭了防火墙,但是一直还是提示以下错误 然来还需要将SELinux 设置 ...

  9. [OpenCV-Python] 4 图像读取

    文章目录 OpenCV-Python: II OpenCV 中的 Gui 特性 4 图片 4.1 读入图像 4.2 显示图像 4.3 保存图像 4.4 总结一下 OpenCV-Python: II O ...

  10. Prism Sample 8 ViewModelLocator

    这一例只是说明ViewModelLocator的使用,没有难度,跳过.