1、先配置假数据用于做侧边栏的循环:(工作中是后端返回)
list.js文件:
const MyData = [
{
title:"首页",
icon:UserOutlined,
permission:1,
path:'/home'
title:"用户管理",
icon:VideoCameraOutlined,
permission:3,
path:'/user-manage',
children:[
title:"用户列表",
icon:UserDeleteOutlined ,
permission:3,
path:"/user-manage/users"
export default MyData
配置侧边栏:
用antd-UI框架布局侧边栏
defaultSelectedKeys
:组件库提供设置菜单高亮的属性
defaultOpenKeys
:组件库提供设置菜单默认展开效果,key需要和后端返回的数据路径一致
注:递归调用时经典
import React, { Component } from 'react'
import MenuArr from '../../router/list.js'
import { Layout, Menu } from 'antd';
import { withRouter } from 'react-router';
import {connect} from 'react-redux'
const { Sider } = Layout;
const { SubMenu } = Menu;
class SideMenu extends Component {
state = {
collapsed: false
renderMenu = (menus)=>{
let {roleType} = JSON.parse(localStorage.getItem("token"))
return menus.map(item=>{
if(item.children && roleType >= item.permission){
return <SubMenu key={item.path} title={
<item.icon/>
<span>{item.title}</span>
</span>
this.renderMenu(item.children)
</SubMenu>
}else{
if( item.permission > roleType){
return null
return (
<Menu.Item key={item.path} icon={<item.icon />}>重:将每个渲染的标题都设置key(就是数据中定义的path="/home")用于做编程试导航和菜单高亮
{item.title}
</Menu.Item>
handleChangePage = (obj)=>{
this.props.history.push(obj.key)
render() {
let selectedKey = this.props.location.pathname
let openKey = "/"+this.props.location.pathname.split("/")[1]
return (
<Sider trigger={null} collapsible collapsed={this.props.isCollapsed}>
{}
andt组件库提供:defaultSelectedKeys :高亮显示谁?//从编程试导航中结构出来path来,给到这个属性
defaultOpenKeys://初始展开的 SubMenu 菜单项 key 数组 (前提是渲染标题的时候,key要和解构出来的path相对应,不然初始化展开不起作用)
<Menu theme="dark" mode="inline" defaultSelectedKeys={[selectedKey]} defaultOpenKeys={[openKey]}
onClick ={this.handleChangePage}
{
this.renderMenu(MenuArr)
</Menu>
</Sider>
const mapStateToProps = state => {
return {
name:"kerwin",
a:1,
isCollapsed:state.isCollapsed
}
}
export default connect(mapStateToProps)(withRouter(SideMenu))
使用 react-sidebar 创建响应式侧边栏导航
react-sidebarA sidebar component for React项目地址:https://gitcode.com/gh_mirrors/re/react-sidebar 1. 项目介绍
react-sidebar 是一个高度可定制的 React 侧边栏组件库,适用于构建网站或应用中的导航菜单。它提供了丰富的样式和交互功能...
最近做了一个后台管理系统主体框架是基于React进行开发的,因此系统的路由管理,选用了react-router(4.3.1)插件进行路由页面的管理配置。
实现原理剖析
1、hash的方式
以 hash 形式(也可以使用 History API 来处理)为例,当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示
function Router() {
this.routes = {};
this.curren
import Router from './Router'
ReactDOM.render(<Router></Router>, document.getElementById('root'))
index.css
body{
padding: 0px;
学习总结使用,博客如中有错误的地方,请指正。改系列文章主要记录了搭建一个管后台的步骤,主要实现的功能有:使用路由模拟登录、退出、以及切换不同的页面;使用redux实现面包屑;引入使用其他常用的组件,比如highchart、富文本等,后续会继续完善。
github地址:https://github.com/huangtao5921/react-antDesgin-admi...
优化路由拦截函数的使用,避免循环引用的隐患。
2022-01-13 更新:
重构路由配置列表的配置方式,配置更加简便,且便于后台管理系统的项目根据路由配置自动生成导航菜单。
实现的功能:
全局路由统一管理,支持便捷配置路由重定向、路由懒加载、自定义meta字段等。
全局路由拦截,支持读取路由meta配置,支持拦截跳转其他路由等。
同时也支持嵌套路由、动态路由参数等.
npm install react-sidemenu --save
在您的React.js应用程序中导入组件:
import SideMenu from 'react-sidemenu';
如果要访问Flow类型的组件,请在通过npm安装时从dist文件夹中包含SideMenu.js 。
造型!!!
要使用默认样式,请在项目中包含side-menu.css 。 通过npm安装时,可以在dist文件夹中找到它。 有关如何自定义样式的想法,请参见 。
演示与范例
展示了功能和代码示例。 在示例中,
import {HashRouter as Router,Switch,Route,Redirect} from "react-router-dom"
import Login from "../pages/Login"
import Layout from "../pages/Layout"
import HouseStyle from "../pages/HouseStyle"
import Permission from "../pa...
效果:左侧导航栏,点击展开,显示子菜单。再次点击,菜单折叠。
代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
上一节介绍了创建项目,并简单使用antd5,这一章节主要介绍必不可少的路由以及状态管理器,如有不正确地方,欢迎大佬指正!!!!
路由我采用React Router 6版本,个人喜欢使用新版本的东西,跟随时代脚步嘛。
状态管理器还是采用最基本的redux,这个教程网上也是很多,遇到问题方便查阅嘛。
1、动态路由数据源
import { UserOutlined, VideoCameraOutlined, AppstoreOutlined } from "@ant-design/icons";
const menuList = [{
key: 'sub1',
title: '首页',
icon: <UserOutlined />,
path: '/homePage',
sourcePath: 'views/homePage',
childre.