React项目 管理后台页面框架搭建

2023-10-27

使用 antd 这个框架搭建
使用 Layout 进行页面布局
在文件夹 component 创建一个新的组件 叫做Frame ,然后里面在创建一个叫做index.js ,这是我们管理后台的一个大的布局结构

在index.js 里添加代码 ,首先在antd 找到合适的布局,然后把代码粘贴过啦,这里我使用的是

在这里插入图片描述
把Layout 里面的内容引入

import { Layout, Menu, Breadcrumb, Icon } from 'antd';

const { SubMenu } = Menu;
const { Header, Content, Sider } = Layout;
  <Layout>
    <Header className="header">
      <div className="logo" />
      <Menu
        theme="dark"
        mode="horizontal"
        defaultSelectedKeys={['2']}
        style={{ lineHeight: '64px' }}
      >
        <Menu.Item key="1">nav 1</Menu.Item>
        <Menu.Item key="2">nav 2</Menu.Item>
        <Menu.Item key="3">nav 3</Menu.Item>
      </Menu>
    </Header>
    <Layout>
      <Sider width={200} style={{ background: '#fff' }}>
        <Menu
          mode="inline"
          defaultSelectedKeys={['1']}
          defaultOpenKeys={['sub1']}
          style={{ height: '100%', borderRight: 0 }}
        >
          <SubMenu
            key="sub1"
            title={
              <span>
                <Icon type="user" />
                subnav 1
              </span>
            }
          >
            <Menu.Item key="1">option1</Menu.Item>
            <Menu.Item key="2">option2</Menu.Item>
            <Menu.Item key="3">option3</Menu.Item>
            <Menu.Item key="4">option4</Menu.Item>
          </SubMenu>
          <SubMenu
            key="sub2"
            title={
              <span>
                <Icon type="laptop" />
                subnav 2
              </span>
            }
          >
            <Menu.Item key="5">option5</Menu.Item>
            <Menu.Item key="6">option6</Menu.Item>
            <Menu.Item key="7">option7</Menu.Item>
            <Menu.Item key="8">option8</Menu.Item>
          </SubMenu>
          <SubMenu
            key="sub3"
            title={
              <span>
                <Icon type="notification" />
                subnav 3
              </span>
            }
          >
            <Menu.Item key="9">option9</Menu.Item>
            <Menu.Item key="10">option10</Menu.Item>
            <Menu.Item key="11">option11</Menu.Item>
            <Menu.Item key="12">option12</Menu.Item>
          </SubMenu>
        </Menu>
      </Sider>
      <Layout style={{ padding: '0 24px 24px' }}>
        <Breadcrumb style={{ margin: '16px 0' }}>
          <Breadcrumb.Item>Home</Breadcrumb.Item>
          <Breadcrumb.Item>List</Breadcrumb.Item>
          <Breadcrumb.Item>App</Breadcrumb.Item>
        </Breadcrumb>
        <Content
          style={{
            background: '#fff',
            padding: 24,
            margin: 0,
            minHeight: 280,
          }}
        >
          Content
        </Content>
      </Layout>
    </Layout>
  </Layout>

在 APP组件中引入Index.js

import React from "react";
import{Switch,Route,Redirect} from 'react-router-dom'
import {adminRoutes} from './routes'
import Frame from './components/Frame/index'
import './App.css';
function App() {
  return (
   
   <Frame>
          <Switch>
            {adminRoutes.map(route=>{
              return <Route key = {route.path} 
              path = {route.path}
              exact = {route.exact} 
              render = {routeProps =>{
                return <route.component {...routeProps}/>
              }}
              />
            })}
            <Redirect to = '/404' />
          </Switch>
     </Frame>
  
  );
}

export default App;

接着我们对Frame组件进行修改 ,修改我们需要展示的内容,所以要传入props参数 ,我们要显示的区域叫做content 区域 ,改为{props.children}
对于props.children ,每个组件都有一个props.children属性,通过这个可以方便地拿到内部的元素

接着做一些简单的优化
1.放一个logo 在页面里 位置在Frame文件下 ,接着在Frame 里的index.js文件里面引入logo ,在<Layout> 组件里面有一个存放logo的位置 ,修改代码,把顶部的导航栏删除掉

不需要
添加一个logo .

import logo from './logo.png';
 <div className="logo">
                    <img src={logo} alt='logo' width="100px" height='50px' />
                </div>

<Header> 一个样式 style={{ backgroundColor: '#fff' }}
接着让我们的布局充满整个屏幕 在APP.CSS里面进行修改 ,删除之前的代码,添加下面这个

html,body,#root,.ant-layout{
   width: 100%;
   height: 100%;
}

布局的左边是一个二级菜单,那我们如何来根据现在的路由来配置,在routes文件下的index.js里面进行路由配置,我们知道路由里的东西有些需要在页面上展示,而有一些是不需要的,比如商品编辑Edit是不需要的,需要展示的就加代码 isShow :true ,这里还需要添加title ,icon ,接着在我们的左侧导航栏是如何根据我们路由的文件做一个动态的生成 。我们知道<Submenu> 属于二级目录,这里我们不需要,直接删除就行了。
接着引入路由配置

import { adminRoutes } from '../../routes';

然后找到哪些路由需要显示的

const routes = adminRoutes.filter(route => route.isShow)

<Menu> 里面添加路由配置的循环,就能在左侧导航栏里面显示了

 {routes.map(route => {
                            return (<Menu.Item key={route.path}
                                onClick={p => props.history.push(p.key)}
                            >
                                <BarChartOutlined />
                                {route.title} </Menu.Item>)
                        })}

这里添加了icon 和title 在导航栏显示

接着查找能够使用的小图标
icon:‘area-chart’ ‘shop’
接着在<Menu.Item> 中显示就可以了

展示一下最后的效果
在这里插入图片描述

接下来我们实现路由的跳转 当点击看板或者商品管理的时候,页面进行跳转 ,使用

  onClick={p => props.history.push(p.key)}

这里面的参数P.key怎么去理解 ,指的是当前Item的key值,获取相对应的路径值
onClick 点击 MenuItem 调用此函数
function({ item, key, keyPath, domEvent })

由于这个Frame 是一个组件,在组件里面使用路由需要用到一个插件 《withRouter》

withRouter的作用和一个简单应用作用:
把不是通过路由切换过来的组件中,将react-router 的 history、location、match 三个对象传入props对象上

默认情况下必须是经过路由匹配渲染的组件才存在this.props,才拥有路由参数,才能使用编程式导航的写法,执行this.props.history.push(’/detail’)跳转到对应路由的页面
然而不是所有组件都直接与路由相连(通过路由跳转到此组件)的,当这些组件需要路由参数时,使用withRouter就可以给此组件传入路由参数,此时就可以使用this.props

这时我们把FRAME组件套进去,代码如下

export default withRouter(Index)

这时发现页面还存在面包屑,我们也不需要,直接去掉。

Breadcrumb面包屑
显示当前页面在系统层级结构中的位置,并能向上返回
注释掉面包屑部分代码 ,同时调整 Layout 间距

 
  <Layout style={{ padding: '16px' }}>

这里就是整个管理页面的局部

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React项目 管理后台页面框架搭建 的相关文章

  • react项目按需加载报错 .libraryName is not a valid Plugin property

    babel presets react app plugins import libraryName antd style true 原配置如上会报错 libraryName is not a valid Plugin property g
  • React Router 路由守卫

    React Router 路由守卫 组件内路由守卫 1 下面是使用高阶组件实现路由守卫的示例代码 import React from react import Route Redirect from react router dom con
  • React学习之扩展浅比较(三十四)

    注意 这玩意也已经被React PureComponent的功能取代了 这里依旧是提一下 主要是React v15的版本中的react with addons js 这些玩意还存在 哎 害人呐 引入 import shallowCompar
  • react的条件渲染(或者组件渲染)五种方式 --开发基础总结

    1 使用if的方式判断是否渲染某个组件 function UserGreeting props return h1 Welcome back h1 function GuestGreeting props return h1 Please
  • 配置使用Eslint的时候 版本错误 "eslint": "5.6.0" a different version of eslint was detected higher up in the tr

    1 如果你也遇到下面的问题 你可以 按照命令行提示的那样 下面这四步完成的一般就可以了 但是不排除你在运行的时候忘记下载某些依赖 1 删除 package lock json 不是package json 你可以选择 yarn lock 或
  • react基础--组件通讯:props基础、子传父、父传子、兄弟组件通讯、context跨级组件、props进阶

    目录 一 props基础 1 1 概述 1 2 函数组件通讯 1 2 1 基本用法 1 2 1 对象数据传递 1 3 类组件通讯 1 4 props的特点 二 组件通讯三种方式 2 1 父传子 2 2 子传父 2 3 兄弟组件通讯 三 co
  • 一文揭秘饿了么跨端技术的演进、实践与落地

    本文会先带领大家一起简单回顾下跨端技术背景与演进历程与在这一波儿接着一波儿的跨端浪潮中的饿了么跨端现状 以及在这个背景下 相较于业界基于 React Vue 研发习惯出发的各种跨端方案 饿了么为什么会选择走另外一条路 这个过程中我们的一些思
  • 【react】新旧生命周期对比

    componentWillUpdate componentWillReceiveProps componentWillMount 上述这三个生命周期在V18以上的版本中 使用时要加上UNSELF name
  • React中使用if else 条件判断

    在react中用jsx渲染dom的时候经常会遇到if条件判断 然而在jsx中竟是不允许if条件判断的 以下有几种判断方式 可以根据自己的应用场景 挑选适合的 方案一 class HelloMessage extends React Comp
  • React-(4)React中的事件绑定

    React中的事件绑定 在 React 组件中 每个方法的上下文都会指向该组件的实例 即自动绑定 this 为当前组件 而且 React 还会对这种引用进行缓存 以达到 CPU 和内存的最优化 在使用 ES6 classes 或者纯函数时
  • react之纯函数、函数组件、类组件、纯组件

    一 纯函数 Pure Function 定义 一个函数的返回结果只依赖于它的参数 并且在执行的过程中没有副作用 我们就把该函数称作纯函数 特点 1 函数的返回结果只依赖与它的参数 同一个输入只能有同一个输出 let foo a b gt a
  • hook中使用ref使用

    对于antd的fom表单 hook使用ref import React useState useEffect useRef from react const dateRef useRef dateRef current setFieldsV
  • react和react jsx基础

    本文是个人学习笔记 例子都是来自React Native官网 之前不是做前端的 没有使用过react 要学习react native做混合开发 react 包括react jsx还是得补补 react和react jsx react是一个j
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • useEffect详情用法

    1 为什么要使用useEffect 想必大家都是用过vue吧 在vue框架所写的项目中 我们通过在与后端进行数据交互的过程中 通常都是会在生命周期中进行数据的请求 然后将数据返回给页面进行渲染 在React中我们也是这样 但是在函数式组件中
  • 【React】 4课 react初识组件

    首先我们如1课创建一个文件夹在文件夹中安装react环境需要的配置文件 npm init y npm i babel standalone D npm i react react dom D 安装配置文件教程链接 https blog cs
  • 值得收藏的UmiJS 教程

    点击上方关注 前端技术江湖 一起学习 天天进步 前言 网上的umi教程是真的少 很多人都只写了一点点 很多水文 所以打算自己写一篇 自己搭建umi 并封装了一下常用的功能 并用到公司实际项目中 umi介绍 Umi 是什么 Umi 中文可发音
  • error Missing “key“ prop for element in array react/jsx-key

    react遇到一个奇怪的问题 error Missing key prop for element in array react jsx key 检查了jsx中使用map的 都定义了key div otherList map item an
  • reactJS 干货(reactjs 史上最详细的解析干货)

    一 State和 Props state是状态机 应该包括 那些可能被组件的事件处理器改变并触发用户界面更新的数据 譬如需要对用户输入 服务器请求或者时间变化等作出响应 不应该包括 计算所得数据 React组件 在render 里使用pro
  • React Jsx转换成真实DOM过程?

    面试官 说说React Jsx转换成真实DOM过程 一 是什么 react 通过将组件编写的 JSX 映射到屏幕 以及组件中的状态发生了变化之后 React 会将这些 变化 更新到屏幕上 在前面文章了解中 JSX 通过 babel 最终转化

随机推荐

  • 使用frp配置内网穿透

    1 服务端配置 服务端即在公网环境下的服务器 需配置frps服务 1 1 下载frp 下载地址是https github com fatedier frp releases 要注意下载的版本 由你的服务器机型决定 我下载的是frp 0 34
  • Windows 网络凭证

    前言 单位内部 员工之间电脑免不了要相互访问 eg 访问共享文件夹 这就引出网络凭证的概念 即你用什么身份访问对端计算机 实验环境 创建共享文件夹 WinSrv 2008上新建的文件夹sharedata 共享给任何人 任何人都是参与者 即具
  • matlab 随机函数 基于,[转载](zz)Matlab 随机函数

    随机函数 包括rand rands randn 根据MATLAB中的相关解释 rands函数一般是用在神经网络的权值和阈值的初始化时 范围是 1到1 rand函数 产生均匀分布的伪随机数 randn函数 正态分布的均值为0 方差为1的随机数
  • 【多尺度密集递归融合网络:超分】

    A novel image super resolution algorithm based on multi scale dense recursive fusion network 基于多尺度密集递归融合网络的图像超分辨率算法 随着卷积
  • Activity劫持实例与防护手段

    原文地址 http blog chinaunix net uid 29170659 id 4930737 html 本文只用于学习技术 提高大家警觉 切勿用于非法用途 什么叫Activity劫持 这里举一个例子 用户打开安卓手机上的某一应用
  • postman如何进行更新呢?

    一般来说 postman我们要用最新的版本 最新版有些比较好的特性 如何更新呢 第一种 postman是自动更新的 什么都不用设置 就会自动更新 更新的界面表现是 第二种 手动设置 打开postman 在file里面选择setting up
  • (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

    1 拉普拉斯 Laplacian 算子 1 1基础介绍 最简单的各向同性导数算子是拉普赖斯算子 其具有旋转不变性 对于两个变量的函数 f x y f x y f
  • java将一个文件或者目录复制到另一个文件下

    java将一个文件或者目录复制到另一个文件下 列如 把 F cc下的所有文件复制到 F home下面 如果是文件的话那就是 F JSON JSON jpg 和 F JSON JSON jpg import java io import ja
  • 如何计算归并排序算法的时间复杂度?

    如何计算归并排序算法的时间复杂度 什么是归并排序 计算时间复杂度 什么是归并排序 归并排序的概念十分简单 就是 分而治之 的思想 这里我直接从网上找了一份对归并排序算法的比较好的介绍排序算法 计算时间复杂度 关键是怎么计算时间复杂度 我们在
  • VTK安装与配置补充2

    本文参考自 https blog csdn net sinat 25923849 article details 78889674 1 原材料 1 1 VTK 最新 Release 文件包 https www vtk org downloa
  • Jenkins使用总结,2.0 新时代:从 CI 到 CD

    Jenkins近阶段使用的总结篇 只写了个引子 却一直未动手写完 今天补上 前几篇文章提到在内网jenkins直接构建部署升级线上环境 job都是暴露在外面 很容易被误操作 需要做简单的权限控制 以防止误操作 导致生产环境挂掉 但jenki
  • Zotero PDF translate翻译CNKI报错

    错误信息 请求错误 此翻译引擎不可用 可能是密钥错误 也可能是请求过快 可以尝试其他翻译引擎 或者来此查看相关回答 https zotero yuque com staff gkhviy pdf trans age09f 请注意 这些错误与
  • 【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论

    文章目录 一 关系数据模型中的结构 1 关系 2 属性 3 属性域 4 元组 5 关系数据库 6 关系表的属性 7 关系数据模型中的键 二 关系完整性 1 空值 NULL 2 关系完整性规则 3 业务规则 4 关系数据库语言 三 规范化 四
  • Openwrt 开启openvpn服务访问内网

    具体设置网上有很多 本篇仅记录如何设置访问内网网段 其实很简单 首先openvpn路由 可以使用 option push route 192 168 1 0 255 255 255 0 内网网段为192 168 1 0 或者 option
  • 2023-6-2第三十三天

    superimpose使叠加 tutorial教程 辅导材料 purge清除 净化 diagonally斜线的 对角线的 exponential指数的 ampersand eject逐出 弹出 supposed假定 猜想 误信的 assum
  • 硬币组合问题python_关于硬币的python问题

    展开全部 coding utf8 import random def chkcoin acoin basecoin 1 5 10 25 flag False for bc in basecoin 62616964757a686964616f
  • php curl 带入cookie,PHP CURL中传递cookie的方法步骤

    curl的cookie怎么使用 新手都很头疼的 curl的参数太多了 其中cookie部分就涉及了4个 当然了 手册上明白写的curl的cookie是3个 但是嘛 不是还有个header的参数嘛 里面可以包含cookie curl非常的好用
  • chatgpt赋能python:Python文件转pyc文件详解

    Python文件转pyc文件详解 Python作为一门程力语言 在软件工程领域中独树一帜 但是Python解释器每次运行程序都会解释Python代码 这种运行方式会降低程序的运行速度 为了避免这种情况的发生 可以将Python文件编译成字节
  • air724UG + Luat玩转物联网(四) 定时器

    luat已经将定时器封装入sys模块 每创建一个任务就会消耗一个定时器 最大不能超过32个 一 luat定时器使用方法 1 sys timerStart fnc ms 开启一个定时器 参数 参数 释义 fnc fnc 定时器回调函数 ms
  • React项目 管理后台页面框架搭建

    使用 antd 这个框架搭建 使用 Layout 进行页面布局 在文件夹 component 创建一个新的组件 叫做Frame 然后里面在创建一个叫做index js 这是我们管理后台的一个大的布局结构 在index js 里添加代码 首先