React+Umi4页面布局导航菜单/面包屑的使用(从零快速搭建中后台系统保姆级记录教程(4))

前言

本篇文章将讲述Umi4的后台管理系统的常见布局内容以及Procomponents的使用,本篇文章是第四章,如果你有兴趣了解umi从零到一的实践,Umi快速搭建中后台系统保姆记录教程

💕💕😍👍初心:希望帮助更多像我一样无助且迷茫,想提升自我的小伙伴,同时提升自己,分享自己的学习方法。

项目地址:github.com/XiaoRongwen...

中后台常见布局内容

Umi中大量封装了Procomponents大量的内容,我只需要在文件中配置,即可展示出样式。例如我们配置的app.tsx中的layout,就是Procomponents的ProLayout

头像导航栏菜单

这一步做下图中右上角头像的下拉内容

我们找到根目录app.tsx下运行时的布局,代码大致内容给如下,用render函数去渲染一个下拉列表

附代码:

js 复制代码
//运行时基本布局配置
export const layout: RunTimeLayoutConfig = ({ initialState }) => {
  //initialState上面登录函数返回的信息
  const DropdownItems: MenuProps['items'] = [
    {
      key: 'logout',
      icon: <LogoutOutlined />,
      label: '退出登录',
    },
    {
      key: 'theam',
      icon: <BulbOutlined />,
      label: '切换主题',
    },
  ];
  const DropdownOnClick: MenuProps['onClick'] = ({ key }) => {
    message.info(`Click on item ${key}`);
  };
  
  return {
    logo: require('@/assets/imgs/logo.png'), //左上角Logo
    title: '橘子运营平台', //左上角Logo后面的名字
    menu: {
      locale: false, //菜单是否国际化
    },
    layout: 'mix', //菜单的方式,有mix,top,side三种,这里用mix
    splitMenus: true, // 这里用了mix才会生效,bia
    avatarProps: {
      src: initialState?.avatar || undefined, //右上角头像
      title: initialState?.name || '用户', //右上角名称
      size: 'small',
      render: (props, dom) => {
        return (
          <Dropdown
            menu={{
              items: DropdownItems,
              onClick: DropdownOnClick,
            }}
          >
            {dom}
          </Dropdown>
        );
      },
    },
    // actionsRender: () => [<InfoCircleFilled key="InfoCircleFilled" />],
    token: {
      //菜单的样式配置
      //   colorBgAppListIconHover: 'rgba(0,0,0,0.06)',
      //   colorTextAppListIconHover: 'rgba(255,255,255,0.95)',
      //   colorTextAppListIcon: 'rgba(255,255,255,0.85)',
      sider: {
        //侧边菜单的配置 ,这里具体看文档
        // colorBgCollapsedButton: '#fff',
        // colorTextCollapsedButtonHover: '#1677ff',
        // colorTextCollapsedButton: 'rgba(0,0,0,0.45)',
        // colorMenuBackground: '#fff',
        // colorBgMenuItemCollapsedElevated: 'rgba(0,0,0,0.85)',
        // colorMenuItemDivider: 'rgba(255,255,255,0.15)',
        // colorBgMenuItemHover: 'rgba(0,0,0,0.06)',
        // colorBgMenuItemSelected: 'rgba(0,0,0,0.05)',
        // colorTextMenuSelected: '#1677ff',
        // colorTextMenuItemHover: '#1677ff',
        // colorTextMenu: 'rgba(255,255,255,0.75)',
        // colorTextMenuSecondary: 'rgba(255,255,255,0.65)',
        // colorTextMenuTitle: 'rgba(255,255,255,0.95)',
        // colorTextMenuActive: '#1677ff',
        // colorTextSubMenuSelected: '#1677ff',
      },
    },
  };
};

页面布局/标题/

什么是面包屑?导航栏啊!怎么弄出来?不知道啊?查文档啊!!

这里简单解释一下面包屑是PageContainer - 页容器的功能,当然也是要去了解下这个组件。

我们查下文档先知道怎么用,然后跟着我一步一步来,你就会明白。 由此可知在路由配置可以让面包屑隐藏或者显示 那找到我们的路由文件config/router.ts文件,配置上 hideInBreadcrumb: false,

js 复制代码
{
    name: '客户管理',
    path: '/customer-manage',
    component: './CustomerManage',
    hideInBreadcrumb: false,
    routes: [
      {
        name: ' 客户列表',
        icon: 'TeamOutlined',
        path: '/customer-manage/customer-list',
        component: './CustomerManage/CustomerList',
      },
      {
        name: ' 客户认证',
        icon: 'FileProtectOutlined',
        path: '/customer-manage/authentication',
        component: './CustomerManage/ClientAuthentication',
      },
    ],
  },

这个时候配置完了,但是还不能显示,为什么呢?经老夫查文档~面包屑是由这个组件来的,那就用上这个组件 procomponents.ant.design/components/...

我们复制他的代码到我们一个页面组件中,这里我拿客户列表的一个组件为例,把它这个代码复制到我们组件中

js 复制代码
import { PageContainer } from '@ant-design/pro-components';
import { Button } from 'antd';

export default function CustomerList() {
  return (
    <PageContainer
      content="欢迎使用 ProLayout 组件"
      tabList={[
        {
          tab: '基本信息',
          key: 'base',
        },
        {
          tab: '详细信息',
          key: 'info',
        },
      ]}
      extra={[
        <Button key="3">操作</Button>,
        <Button key="2">操作</Button>,
        <Button key="1" type="primary">
          主操作
        </Button>,
      ]}
      footer={[
        <Button key="rest">重置</Button>,
        <Button key="submit" type="primary">
          提交
        </Button>,
      ]}
    >
      123
    </PageContainer>
  );
}

然后运行我们的代码,这个时候我们的面包屑就出来了

具体这个组件需要什么内容,那就是自学了,这里教是交不会的。

下期内容我们讲述权限菜单

相关推荐
console.log('npc')32 分钟前
React 19 + Vite 企业级前端项目:从零搭建到规范交付
前端·react.js·前端框架
光影少年38 分钟前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
抱抱宝10 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
想要成为糕糕手15 小时前
🚀 在浏览器里跑 DeepSeek-R1?WebGPU 端侧推理实战(六)—— 完结篇:消息渲染与流式收尾
react.js·typescript·llm
YIAN16 小时前
从 Hash 底层原理到 React Router v6 实战:我学会了什么?
前端·react.js·vue-router
YUS云生17 小时前
大模型学习·第46天:Agent智能体核心概念与ReAct框架
前端·学习·react.js
To_OC17 小时前
后端接口还没交付,前端如何独立把整套业务跑通
前端·react.js·全栈
程序员跑路19 小时前
Barrel Export、Jest、Babel 与依赖图
react.js
l1m0_20 小时前
告别反复修改Prompt:AI生成React应用并落地开发的实战复盘
前端·react.js·ui·ai·设计
xexpertS20 小时前
前端工程转型实践:从 Ember 迁移到 React,提升构建速度与研发效能
前端·react.js·前端框架