react18 antd 引入导航栏之后一些bug,解决方法收集

概述:

我们开发react引入antd之后导航栏会出现刷新不选中、不展开二级导航栏、页面js点击之后不选中最新tab、只能展开一个二级tab之类的问题。那么我们一起来把问题给解决了


问题描述

其实问题这些问题差不多就是一个问题,就是Menu没有刷新选中的状态

实现代码

import React, { useState ,useEffect } from 'react';
import {DesktopOutlined,FileOutlined,PieChartOutlined,TeamOutlined,UserOutlined,
} from '@ant-design/icons';
import {Menu} from 'antd';
import {useNavigate ,useLocation} from "react-router-dom"
import type { MenuProps } from 'antd';type MenuItem = Required<MenuProps>['items'][number];function getItem(label: React.ReactNode,key: React.Key,icon?: React.ReactNode,children?: MenuItem[],
): MenuItem {return {key,icon,children,label,} as MenuItem;
}const items: MenuItem[] = [getItem('首页', '/index', <PieChartOutlined />),getItem('店铺', '/store', <DesktopOutlined />),getItem('商品', 'goods', <UserOutlined />, [getItem('平台商品', '/goods/list'),getItem('平台添加', '/goods/edit'),getItem('平台商品', '/goods/page301'),getItem('平台品牌', '48'),getItem('自营商品', '55'),getItem('自营品牌', '56'),getItem('标配商品', '57'),]),getItem('订单', 'page4', <UserOutlined />, [getItem('采购单', '/page3/page301'),getItem('客户订单', '4'),getItem('订单列表', '50'),getItem('售后列表', '53'),]),getItem('财务', 'page5', <UserOutlined />, [getItem('结算单列表', '/page3/page301'),getItem('我的钱包', '40'),getItem('支付密码设置', '52'),]),getItem('会员', 'page6', <UserOutlined />, [getItem('邀请会员', '/page3/page301'),getItem('邀请用户列表', '41'),]),getItem('数据', 'page7', <UserOutlined />, [getItem('销售统计', '/page3/page301'),getItem('售后统计', '42'),getItem('商品统计', '43'),getItem('操作日记', '44'),]),getItem('广告管理', 'page8', <UserOutlined />, [getItem('广告位列表', '/page3/page301'),getItem('广告列表', '422'),]),
];const Comp: React.FC = () => {const navigateTo = useNavigate();const currentRouter =  useLocation();const [selectedKeys, setSelectedKeys] = useState(currentRouter.pathname);//当前选中项const [stateOpenKeys, setStateOpenKeys] = useState(firstOpenkey);//默认二级导航栏useEffect(() => {//组件动态更新setSelectedKeys(currentRouter.pathname)})const menuClick = (e:{key:string})=>{console.log(e.key)//在js里面跳转到对应的路由  编程式导航跳转,利用到一个hooknavigateTo(e.key);}function firstOpenkey(): string{for(let i=0;i<items.length;i++){//判断找到情况if(items[i]!['children']&&items[i]!['children'].length>0 && items[i]!['children'].find(findkey)){return items[i]!.key as string;}}return ''}function findkey(obj:{key:string}){return obj.key===currentRouter.pathname}const handleonOpenChange =(keys:string[])=>{//展开和回收的事件setStateOpenKeys(keys[keys.length-1])}return(<Menu theme="dark" defaultSelectedKeys={[currentRouter.pathname]} selectedKeys={[selectedKeys]}mode="inline" items={items} onClick={menuClick} onOpenChange={handleonOpenChange}openKeys={[stateOpenKeys]}/>)
}export default Comp;

这样一来就可以通过useNavigate来跳转页会刷新当前的状态,展开相应的二级ta

感兴趣的小伙伴也可以前往https://github.com/yididid/react-manage,进行下载项目代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML 如何实现一个带间隙的圆环

实际效果&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5e634cedded9424d96fbe6d46f34f61a.png#pic_center 代码实现&#xff1a; HTML部分&#xff1a; <svg width"500" height"500" viewBox"0 0 100 100">&…

《精准表达》让你的方案在最短的时间内打动人心 - 三余书屋 3ysw.net

精准表达&#xff1a;让你的方案在最短的时间内打动人心 大家好&#xff0c;今天我们要解读的书名为《精准表达》&#xff0c;其副标题是“让你的方案在最短的时间内打动人心”。在工作中&#xff0c;人们经常需要提交各种方案&#xff0c;例如销售人员向大客户介绍公司产品时…

HandlerInterceptor周边概念

HandlerInterceptor是Spring MVC框架中的一个接口&#xff0c;在org.springframework.web.servlet包下&#xff0c;它是Spring MVC框架中的一部分&#xff0c;它参与到Spring MVC的请求处理生命周期中&#xff0c;所以不是Spring IoC容器的Bean生命周期中的东西&#xff0c;它用…

idea显示maven或者gradle无法从仓库获取到项目中的jar包,jar包所在仓库无法访问解决方法,百试百灵

**idea显示maven或者gradle无法从仓库获取到项目中的jar包&#xff0c;jar包所在仓库无法访问解决方法&#xff0c;百试百灵** 直接上图&#xff0c;大概的故障问题就是&#xff1a;idea导入新的项目&#xff0c;因为项目中很多的jar需要从远程仓库下载&#xff0c;但是远程仓库…

WPF之数据模版

wpf数据模版与控件模版功能差不多&#xff0c;都是讲常用的自定义控件封装起来&#xff0c;通过键调用。但是数据模版可以绑定数据。 代码如下 &#xff1a; 第一步&#xff1a;(创建模版并且将需要显示的数据绑定相对应的模型类属性上) // 自定义控件模版和绑定数据 // Text…

C++ //练习 13.16 如果f中的参数是const numbered,将会怎样?这会改变输出结果吗?如果会改变,为什么?新的输出结果是什么?

C Primer&#xff08;第5版&#xff09; 练习 13.16 练习 13.16 如果f中的参数是const numbered&&#xff0c;将会怎样&#xff1f;这会改变输出结果吗&#xff1f;如果会改变&#xff0c;为什么&#xff1f;新的输出结果是什么&#xff1f; 环境&#xff1a;Linux Ubunt…

【XR806开发板试用】系统烧写

我是在虚拟机下安装&#xff0c;这部分大家应该都会吧&#xff0c;就不过多阐述了。 环境配置 大家应该先看官方文档【XR806】 1.准备工作 安装Git 在安装git后&#xff0c;需git-lfs并配置用户信息。否则可能拉代码失败 git config --global user.name “yourname” git co…

Excel操作-vlookup函数用法大全

目录 常规查找 ​编辑​编辑多条件查找 一维表的多条件查找 二维表的多条件查找 反向查找&#xff08;从右到左&#xff09; ​编辑 匹配多列数据 法一&#xff1a; 法二&#xff1a; 模糊匹配 按指定次数重复 在合并单元格中查找 法一&#xff1a; 法二&#xff1…

stringRedisTemplate.opsForValue().increment(key)报空指针异常

解决办法&#xff1a;https://www.jianshu.com/p/789b33b5943e BUG复现满足以下条件可触发&#xff1a; 1.在RedisConfig开启Redis事务 redisTemplate.setEnableTransactionSupport(true);2.业务中开启事务 Transactional3.同一个业务下用生产多点id就报这个错误了 Cannot in…

Pyside6:Spacer的使用,布局中控件顶格添加

在普通的布局&#xff0c;如水平或纵向布局中&#xff0c;我们的控件都会保持中间状态&#xff0c;如下&#xff1a; 但有许多情况下 &#xff0c;我们需要将控件布局为如下界面&#xff1a; 在前端开发时&#xff0c;我们很容易通过flex来进行布局&#xff0c;修正它的居中或者…

以赛促学、生态共建 | 软通动力子公司鸿湖万联成功举办基于x86架构的OpenHarmony应用生态挑战赛

近日&#xff0c;由开放原子开源基金会、央视网、江苏省工业和信息化厅、无锡市人民政府、江苏软件产业人才发展基金会、苏州工业园区、无锡高新区等共同承办&#xff0c;鸿湖万联参与共建的“基于x86架构的OpenHarmony应用生态挑战赛”决赛路演在无锡圆满落幕。本次挑战赛历时…

倾斜摄影三维模型数据在立体裁剪应用分析

倾斜摄影三维模型数据在立体裁剪应用分析 立体裁剪是一种将三维模型应用于摄影中的技术&#xff0c;可以在摄影过程中将虚拟的三维模型与现实场景进行合成&#xff0c;从而实现逼真的视觉效果。倾斜摄影是一种通过无人机或其他飞行器进行航拍的技术&#xff0c;可以获取到大范围…

python与pycharm如何设置文件夹为源代码根目录

相信大家遇到过下面这种情况 当我们在当前项目下引入了其它项目的代码&#xff0c;这是其它项目的包的导入路径是不用于当前项目的&#xff0c;这样导致项目无法正常起来&#xff0c;但是我们又不可能一个个文件去处理&#xff0c;这时可以用下面的方式解决 pycharm直接设置 …

安全中级-初开始

一、网络基础 重要点&#xff1a;TTL值&#xff08;防环&#xff0c;linux64.Windows128 &#xff09;&#xff0c;IP数据包包头格式字节&#xff08;20&#xff09; 标识标志偏移量起到什么作用&#xff08;数据超过1500会分片&#xff09; wireshack抓包会有一个MSS&#x…

Vivado中的加法器电路结构

先给出结论&#xff0c;Vivado中的加法器是利用SLICE中的LUT和进位链实现的。 目录 一、全加器二、SLICE如何实现加法器三、实例测试1.直接使用加法器2.LUT级别 一、全加器 一位全加器的结构如下&#xff1a; 其中&#xff1a; A、B为输入的两个加数CI为进位CO为本位对高位的…

连接器电镀小课堂系列三 | 打底电镀、基体金属、润滑、电压

【摘要/前言】 电镀会影响连接器系统的寿命和质量&#xff0c;包括耐腐蚀性、导电性、可焊性&#xff0c;当然还有成本。 【小课堂背景】 这是 Samtec质量工程经理 Phil Eckert 和首席工程师 Matt Brown 讨论连接器电镀相关问题的系列第三部分&#xff0c;主题为 “打底电镀、…

C语言 | Leetcode C语言题解之第40题组合总和II

题目&#xff1a; 题解&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, sequence, sizeof(int…

通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验

通义灵码自成功入职阿里云后&#xff0c;其智能编程助手的角色除了服务于阿里云内部几万开发者&#xff0c;如今进一步服务函数计算 FC 产品开发者。近日&#xff0c;通义灵码正式进驻函数计算 FC WebIDE&#xff0c;让使用函数计算产品的开发者在其熟悉的云端集成开发环境中&a…

ARTS Week 24

Algorithm 本周的算法题为 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; img 输入&#xff1a;list1 [1,2,4], list2 [1,3,4]输出&#xff1a;[1,1,2,3,4,4] 实现代码如下&…

springcloudgateway集成knife4j

上篇我们聊聊springboot是怎么继承knife4j的。springboot3 集成knife4j-CSDN博客 本次我们一起学习springcloudgateway集成knife4j。 环境介绍 java&#xff1a;17 SpringBoot&#xff1a;3.2.0 SpringCloud&#xff1a;2023.0.0 knife4j &#xff1a; 4.4.0 引入maven配置…