13.自动选中当前菜单项和子菜单项刷新页面自动打开状态保持
React-router-dom v6版本需要做如下操作:
1.菜单被选中,在components/left-nav/left-nav.jsx 文件下代码如下:
/* 左侧导航的组件 */ import React from "react"; import { Link, useNavigate, useLocation} from 'react-router-dom' import {Menu} from "antd"; import logo from '../../assets/logo.png' import './index.css' import menuList from "../../config/menuConfig" export default function LeftNav (){ const navigate = useNavigate() // 获取当前页面路径上path const current_path_obj = useLocation() // 返回一个对象 {pathname: '/role', search: '', hash: '', state: null, key: 'fmqz5mcg'} console.log("current path ==", current_path_obj.pathname) // 这里把 defaultSelectedKeys 改为 selectedKeys 是因为有个重定向问题 return ( <div className="left-nav"> <Link to="/" className="left-nav-header"> <img src={logo} alt="logo"/> <h1>XXXXX</h1> </Link> <Menu theme="dark" mode="inline" selectedKeys = {[current_path_obj.pathname]} onClick={({key}) => { console.log("to " , key) navigate(key) }} items={menuList} /> </div> ) }
2.子菜单项打开状态保持实现如下:
/* 左侧导航的组件 */ import React from "react"; import { Link, useNavigate, useLocation} from 'react-router-dom' import {Menu} from "antd"; import logo from '../../assets/logo.png' import './index.css' import menuList from "../../config/menuConfig" // 定一个函数来判断当前选中的路由是否需要打开,前提是有子路由 const getOpenKey = (url_key_str,keys) => { let openKey = '' keys.forEach(item => { if(item.children){ item.children.forEach(subItem => { if (url_key_str === subItem.key){ openKey = item.key } // 因为有嵌套列表所以需要递归 if(subItem.children){ getOpenKey(item.children) } }) } }) return openKey } export default function LeftNav (){ const navigate = useNavigate() // 获取当前页面路径上path const current_path_obj = useLocation() // 返回一个对象 {pathname: '/role', search: '', hash: '', state: null, key: 'fmqz5mcg'} console.log("current path ==", current_path_obj.pathname) // 这里把 defaultSelectedKeys 改为 selectedKeys 是因为有个重定向问题 return ( <div className="left-nav"> <Link to="/" className="left-nav-header"> <img src={logo} alt="logo"/> <h1>XXXXX</h1> </Link> <Menu theme="dark" mode="inline" selectedKeys = {[current_path_obj.pathname]} defaultOpenKeys = {[getOpenKey(current_path_obj.pathname, menuList)]} onClick={({key}) => { console.log("to " , key) navigate(key) }} items={menuList} /> </div> ) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现