《CMS后台系统》项目实战 详细分解(六)

简介: 《CMS后台系统》项目实战 详细分解(六)

点击实现路由跳转

  • 修改key值
<Menu.Item key="list"><ReadOutlined /> 查看文章列表</Menu.Item>
      <Menu.Item key="edit"><EditOutlined /> 文章编辑</Menu.Item>
      <Menu.Item key="means"><DatabaseOutlined /> 修改资料</Menu.Item>
复制代码


  • 使用hook跳转
import {useNavigate} from 'react-router-dom'
  const navigate = useNavigate()
复制代码


// 修改handleClick
  const handleClick = e => {
    navigate('/'+e.key)
  };
复制代码


// 默认路由
  defaultSelectedKeys={['list']}
复制代码


QQ截图20221112082042.png


  • 实现效果

微信截图_20221112082418.png


遇到的bug

刷新之后路径并未改变,菜单栏改变了。

微信截图_20221112082439.png


  • 片段代码

引入useLocation

import React, { useEffect, useState } from 'react'
import {useNavigate, useLocation} from 'react-router-dom'
const location = useLocation()
const [defaultKey, setDefaultKey] = useState('')
// 一旦渲染立刻获取动态的路由路径,不在使用默认的
  useEffect(() => {
      let path = location.pathname;
      let key = path.split('/')[1];
      setDefaultKey(key)
  }, []);
  // 及时更新路由路径
    const handleClick = e => {
    navigate('/'+e.key)
    setDefaultKey(e.key)
  };
复制代码


  • 实现效果图(自己刷新试试咯)

微信截图_20221112082458.png


微信截图_20221112082517.png


面包屑

传送门

ant.design/components/…

  • 创建Bread组件

微信截图_20221112082540.png


初始化书写Bread组件

import React from 'react';
import { Breadcrumb } from 'antd';
import { HomeOutlined } from '@ant-design/icons';
const Bread = () => {
    return (
        <Breadcrumb>
        <Breadcrumb.Item href="">
          <HomeOutlined />
        </Breadcrumb.Item>
        <Breadcrumb.Item>Application</Breadcrumb.Item>
      </Breadcrumb>
    );
}
export default Bread;
复制代码


在App组件中引入一个Bread组件

import Bread from './components/Bread'
<div className='container_box'>
    <Bread/>
      <Outlet/>   
</div>
复制代码


  • 根据路径更新面包屑

更新面包屑名字(useEffect取过来,useState再赋值更新上)

// 引入hook
import React, {useState,useEffect} from 'react';
// 设置变量
const [breadName, setBreadName] = useState('')
// 获取路径
const {pathname} = useLocation()
// 不是在组件mounted时去获取路径,而是路径一旦变化,就要获取对应的路径名称,并且修改breadName
// 监听路由的路径(/list /edit /means)
useEffect(() => {
    switch (pathname) {
        case "/list":
            setBreadName('查看文章列表');
            break;
        case "/edit":
            setBreadName('文章编辑');
            break;
        case "/means":
            setBreadName('修改资料');
            break;
        default:
            break;
    }
}, [pathname])
复制代码


内容补充(表单,表格)

  • 创建2个路由组件

微信截图_20221112082617.png

微信截图_20221112082632.png


  • 配置路由(index.jsx)
import ListTable from '../pages/ListTable'
import ListList from '../pages/ListList'
const BaseRouter = () => (
    <Router>
        <Routes>
            <Route path='/' element={<App />}>
                <Route path='/listtable' element={<ListTable />}></Route>
                <Route path='/listlist' element={<ListList />}></Route>
                <Route path='/edit' element={<Edit />}></Route>
                <Route path='/means' element={<Means />}> </Route>
            </Route>
            <Route path='/login' element={<Login />}> </Route>
            <Route path='/register' element={<Register />}> </Route>
        </Routes>
    </Router>
)
复制代码


  • 修改面包屑
useEffect(() => {
        switch (pathname) {
            case "/listlist":
                setBreadName('查看文章列表List');
                break;
            case "/listtable":
                setBreadName('查看文章列表Table');
                break;
            case "/edit":
                setBreadName('文章编辑');
                break;
            case "/means":
                setBreadName('修改资料');
                break;
            default:
                setBreadName(pathname.includes('edit') ? '文章编辑' : "");
                break;
        }
    }, [pathname])
复制代码


  • 修改侧边栏
<Menu.Item key="listlist"><ReadOutlined /> 查看文章列表List</Menu.Item>
            <Menu.Item key="listtable"><ReadOutlined /> 查看文章列表Table</Menu.Item>
复制代码


  • 实现效果

微信截图_20221112082656.png


ListTable 书写样式

  • 在APP组件中设置布局属性
<div className='container_box'>
    <Bread/>
      <Outlet/>   
</div>
复制代码


base.less

.container .container_box {
  flex: 1;
  box-sizing: border-box;
  padding: 20px;
  display: flex;
  flex-direction: column;
}
复制代码


  • 创建less文件

微信截图_20221112082715.png


.list_table{
    width: 100%;
    background: #fff;
    height: 100%;
}
复制代码


  • 引入less样式到ListTable
import './less/ListTable.less'
// 不要忘记添加类名
<div className='list_table'>ListTable</div>
复制代码


  • 实现效果图

微信截图_20221112082731.png



目录
相关文章
|
自然语言处理 算法 数据挖掘
自蒸馏:一种简单高效的优化方式
背景知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。例如下右图中,两个“2”对应的hard_label都是一样的,即0-9分类中,仅“2”类别对应概率为1.0,而soft_label
自蒸馏:一种简单高效的优化方式
uniapp组件库uview1的u-button的问题,u-button多次点击只触发事件一次
uniapp组件库uview1的u-button的问题,u-button多次点击只触发事件一次
633 0
|
JSON 数据格式 Python
Python 参数校验的进化
事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器,考虑到要可以灵活的配置就萌生了大概的印象: 使用map - 参数A:ruleA,参数B-ruleB.
2490 0
|
Java 数据库连接 调度
探索阿里巴巴新型ORM框架:初试ElasticJob Plus
【10月更文挑战第17天】 在Java开发领域,Mybatis和Mybatis Plus作为持久层框架,已被广泛使用。它们通过简化数据库操作,提高了开发效率。最近,阿里巴巴推出了一个新的ORM框架——ElasticJob Plus,它不仅包含了Mybatis Plus的所有特性,还增加了分布式任务调度的功能。本文将带你初探ElasticJob Plus,看看它是如何成为Mybatis Plus的有力竞争者。
326 0
|
11月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
239 21
|
SQL Java 数据库连接
既生瑜何生亮,浅析下层出不穷的新ORM框架: MyBatis-Flex
这里先说说我的观点哈,仅是个人观点哦,不喜勿喷。现在这些框架层出不穷,其实吧个人感觉没必要过度关注,因为这些框架并没有完完全全做到推陈出新,反倒是有一点互相“学习copy”的感觉,并没有那么新颖强大、从无到有的一个过程。那说回今天的主题ORM框架,在Java后端技术栈里面我们都知道`MyBatis`是主流的ORM框架,现在很多公司都在使用着,后来在`MyBatis`基础上出现了两个比较主流的增强框架`Mybatis-Plus`和`Fluent-MyBatis`
972 0
|
负载均衡 Cloud Native Linux
Docker部署Traefik结合内网穿透远程访问Dashboard界面
Docker部署Traefik结合内网穿透远程访问Dashboard界面
|
存储 缓存 安全
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
1676 0
|
数据处理 Python
使用Python的time库来格式化时间
使用Python的time库来格式化时间
497 1