修改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. 淘宝/天猫获得淘宝商品评论 API 返回值说明

    item_review-获得淘宝商品评论 taobao.item_review 公共参数 API测试工具 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) ...

  2. 如何做到API文档规范化

    定义一个好的 API 文档是优秀研发人员的标准配置,在执行接口测试之前,测试人员一定会先拿到开发给予的接口文档. 测试人员可以根据这个文档编写接口测试用例,优秀的文档可以区分好的用户体验和坏的用户体验 ...

  3. 利用 kubeadm 创建 kubernetes (k8s) 的高可用集群

    引言: kubeadm提供了两种不同的高可用方案. 堆叠方案:etcd服务和控制平面被部署在同样的节点中,对基础设施的要求较低,对故障的应对能力也较低 堆叠方案 最小三个Master(也称工作平面), ...

  4. [网络/Linux]网络嗅探工具——nmap

    1 nmap 简介 Nmap 即 Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是网络扫描和主机检测的工具,用nmap进行信息收集和检测漏洞,功能有: 检测存活主机 ...

  5. 补五月五号java基础知识点

    1.容器类:容器类是java以类库的形式供有用户开发程序时可直接使用的各种数据结构.2.java容器框架中有两个名称分别为Collection和Set的接口,为防止名称的冲突,本书将Collectio ...

  6. PHP__采集类__Snoopy

    Snoopy                                                  目录 了解Snoopy.1 功能:...1 下载Snoopy:...2 Snoopy常用 ...

  7. 从ajax到跨域引发的相关面试题总结

    转载请注明出处: 1.ajax异步和同步的区别 Ajax是一种基于JavaScript语言和XMLHttpRequest对象的异步数据传输技术,通过它可以使不用刷新整个页面的情况下,对页面进行部分更新 ...

  8. 23.04.06_blog能被搜索到

    博客优化内容 对于刚建立的博客来说,谷歌往往不能或者不会收录你的博客,为了使自己的博客可以被谷歌所检索到.我们需要主动向谷歌提供网址信息. 提交到百度搜索 访问百度搜索资源平台官网,注册或者登陆百度账 ...

  9. 帝国cms将没有搜索到结果的关键字存入到数据库的方法

    在帝国cms网站前台搜索一个关键字,如果在网站中查询到了,这个关键字会被记录入搜索关键字表中,但是如果在网站中没有搜索到,就不会记录入搜索关键字表中,那怎么把没有搜索结果的关键字才能记录到数据库中,方 ...

  10. Rails 中的布局和渲染

    Templates, Partials, and Layouts 在 Rails 中,视图是用于呈现 HTML.XML.JSON 等响应的模板.Rails 的视图系统支持模板.局部模板和布局模板,它们 ...