《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



目录
相关文章
|
4月前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
82 0
|
数据库
【自然框架】CMS之数据库设计
    在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个“自然框架”,主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。
1572 0
|
1月前
|
消息中间件 算法 前端开发
京东面试:说说CMS工作原理?
京东面试:说说CMS工作原理?
34 2
|
4月前
|
Prometheus 监控 Cloud Native
JVM工作原理与实战(三十三):监控GC过程的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了jstat工具、VisualVM插件、Prometheus + Grafana、GC日志等内容。
128 0
|
小程序 数据可视化 数据库
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
501 0
|
存储 缓存 前端开发
项目实战典型案例13——学情页面逻辑问题
项目实战典型案例13——学情页面逻辑问题
57 0
|
存储 缓存 前端开发
【项目实战典型案例】13.学情页面逻辑问题
【项目实战典型案例】13.学情页面逻辑问题
|
存储 API
《CMS后台系统》项目实战 详细分解(十)
《CMS后台系统》项目实战 详细分解(十)
73 0
《CMS后台系统》项目实战 详细分解(十)
|
资源调度 API 数据处理
《CMS后台系统》项目实战 详细分解(七)
《CMS后台系统》项目实战 详细分解(七)
102 0
《CMS后台系统》项目实战 详细分解(七)
《CMS后台系统》项目实战 详细分解(八)
《CMS后台系统》项目实战 详细分解(八)
108 0
《CMS后台系统》项目实战 详细分解(八)