1.新建config目录和menuList.js
import {
HomeOutlined,
ShopOutlined,
} from '@ant-design/icons';
import Home from 'pages/home/home'
import ArticleList from "pages/article/article";
const menuList =
[
// 菜单相关路由
//key给路由用,route给菜单用
{ title: "首页", key: "app/home", route: "/app/home", icon: < HomeOutlined />, component: <Home/> },
{ title: "文章管理", key: "app/articleCategory", icon: < ShopOutlined />,
subs: [
{ title: "文章管理", key: "app/article", route: "/app/article", component: <ArticleList/> },
{ title: "分类管理", key: "app/category", route: "/app/category", component: <ArticleList/> },
],
}
];
export default menuList;
2.修改router.js
import React from 'react'
import { HashRouter, Routes, Route, Navigate } from 'react-router-dom'
import Login from 'pages/login/login'
import AppPage from 'pages/app/app'
import menuList from 'config/menuList'
function RequireAuth({ children }) {
const authed = localStorage.getItem('isLogin')
return authed === 'true' ? ( // 判断 localstorage 中登录状态是否为 true
children
) : (
<Navigate to="/" replace /> // 跳转到登录
);
}
function RouterDom() {
return (
<HashRouter>
<Routes>
<Route path="/" element={<Login/>} />
<Route path="/*" element={<RequireAuth><AppPage/></RequireAuth>} >
{menuList.map((item, index )=> {
var routers = [];
if(item.component){
routers.push(<Route key={index} path={item.key} element={item.component}/>)
}
if (item.subs) {
item.subs.map((item2, index2 ) => {
routers.push(<Route key={index2} path={item2.key} element={item2.component}/>)
})
}
return routers
})}
</Route>
</Routes>
</HashRouter>
);
}
export default RouterDom
3.修改siderdom.js
// import React, { useState, useEffect } from 'react'
import React, { useState } from 'react'
import { Layout } from 'antd';
import { Menu } from 'antd';
import { Link } from 'react-router-dom'
import menuList from 'config/menuList'
const { Sider } = Layout;
const { SubMenu } = Menu;
function SiderDom(props) {
const [selectedKeys, setSelectedKeys] = useState(['home'])
const [openKeys, setOpenKeys] = useState(['home'])
const { collapsed } = props
const MenuOnOpenChange = (openKeys) => {
let newOpenKeys = openKeys.pop()
setOpenKeys([newOpenKeys])
}
const MenuOnSelect = (e) => {
setSelectedKeys([e.key])
}
// useEffect(() => {
// let url = window.location.hash
// let urlList = url.split('/')
// setOpenKeys([urlList[2]])
// setSelectedKeys([urlList[3]])
// }, [window.location.hash])
return (
<Sider trigger={null} collapsible collapsed={collapsed}>
<Menu
selectedKeys={selectedKeys}
openKeys={openKeys}
mode="inline"
theme="dark"
onOpenChange={(openKeys) => MenuOnOpenChange(openKeys)}
onSelect={(e) => MenuOnSelect(e)}
>
{menuList.map(item => {
if (item.subs) {
return (
<SubMenu
key={item.key}
icon={item.icon}
title={item.title}
>
{
item.subs.map(item2 => (
<Menu.Item key={item2.key}>
<Link to={item2.route}>{item2.title}</Link>
</Menu.Item>
))
}
</SubMenu>
)
}
else {
return (
<Menu.Item key={item.key} icon={item.icon}>
<Link to={item.route}>{item.title}</Link>
</Menu.Item>
)
}
})}
</Menu>
</Sider>
)
}
export default SiderDom
4.page下的app.js,去掉了navdom的显示 改到每个页面中
import React, { useState, useCallback } from 'react'
import { Outlet } from 'react-router-dom'
import { Layout } from 'antd';
import SiderDom from '../common/SiderDom/SiderDom'
import HeaderDom from '../common/HeaderDom/HeaderDom'
// import loadable from '../common/Loadable/Loadable';
import './app.less'
const { Content } = Layout;
// 异步加载组件,按需加载
// const Home = loadable(() => import('pages/home/home'));
function App() {
const [collapsed, setCollapsed] = useState(false)
const toggle = useCallback(() => {
setCollapsed(!collapsed)
});
return (
<div className="app">
<Layout className="app-layout">
<SiderDom collapsed={collapsed} />
<Layout className="site-layout">
<HeaderDom toggle={toggle} />
<Content className="site-layout-content">
<Outlet />
</Content>
</Layout>
</Layout>
</div>
)
}
export default App
5.navdom.js 调整写法,通过页面传值
import React from 'react'
import { Breadcrumb } from 'antd';
import { Link } from 'react-router-dom'
import './NavDom.less'
function NavDom(props) {
const { breads } = props;
console.log(breads)
return (
<div className="NavDom">
<Breadcrumb>
<Breadcrumb.Item>
<Link to="/app/home">首页</Link>
</Breadcrumb.Item>
{breads?.map((bread, i) => (
<Breadcrumb.Item key={i}>{bread}</Breadcrumb.Item>
))}
{/*
<Breadcrumb.Item>
<a href="">Application Center</a>
</Breadcrumb.Item>
<Breadcrumb.Item>
<a href="">Application List</a>
</Breadcrumb.Item>
<Breadcrumb.Item>An Application</Breadcrumb.Item> */}
</Breadcrumb>
</div>
)
}
export default NavDom
6.在article中赋值
本文为看恩吧原创文章,转载无需和我联系,但请注明来自knsay.com