React Router 6 函数式组件withRouter 路由属性配置

news2024/12/29 10:37:56

withRouter为解决开发过程中函数组件路由参数获取问题,之前版本的withRouter是直接可以导入使用的,现在的需要手写

这里使用了hooks,获取路由、参数等相关信息

需要在函数式组件内使用props,用法:

1.需要先使用高阶组件withRouter为组件添加相关属性

2.组件内传入props 参数 

3.组件内部使用props.navigate()       props.params()等用法

下面是具体写法:

withRouter.js

import {
    useParams,
    useLocation,
    useNavigate,
    useSearchParams,
} from "react-router-dom";

export default function withRouter(Component) {
    // 相当于给 MyCard组件添加各种props属性,还添加三个重要的属性params,location,navigate

    return (props) => (
        <Component
            {...props}
            searchParams={useSearchParams()}
            params={useParams()}
            location={useLocation()}
            navigate={useNavigate()}
        />
    );
}
// withRouter(MyCard)让当前组件MyCard可以访问路由信息。

// 用法: 将export default  MyCard 替换为下方内容
// export default withRouteruter(MyCard);

组件内使用 例下方组件 SideMenu.js  :

import React from 'react'
import { Layout, Menu } from 'antd'
import withRouter from '../withRouter'
import {
  UserOutlined,
  VideoCameraOutlined,
} from '@ant-design/icons';
import './index.css'
const { Sider } = Layout


function SideMenu(props) {
  const menuItems = [
    {
      key: '1',
      icon: <UserOutlined />,
      label: 'label 1'
    },
    {
      key: '2',
      icon: <UserOutlined />,
      label: 'label 2'
    },
    
  ]
  const onMenuClick = (e) => {
    props.navigate(e.key)
  };
  return (
    <Sider trigger={null} collapsible collapsed={false}>
      <div className="logo" >test</div>
      <Menu
        theme="dark"
        mode="inline"
        defaultSelectedKeys={['1']}
        items={menuItems}
        onClick={onMenuClick}
      />
    </Sider>
  )
}


export default withRouter(SideMenu)

withRouter 用法很清晰了,这里的函数组件 SideMenu 使用后,组件传递props,

 然后在组件内可以获取到的props内容如下:

 需要的数据是这几个,当然这个 withRouter.js组件是可维护的,需要什么可以继续加

在SideMenu.js内获取到后,点击跳转也是比较常用的,新版本的用法如上述代码:

这里的e.key是菜单组件内部内容,在其他地方使用

页面跳转

props.navigate("/home")

 然后就可以跳转成功了

回退

props.navigate(-1)

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

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

相关文章

K8s常见面试题20问

K8s常见面试题19问 收集了一些K8s常见问题和同学们面试常被问到的问题. 如果有新的面试题私聊或者留言给我 1. Docker和虚拟机有那些不同 虚拟化环境下每个 VM 是一台完整的计算机&#xff0c;在虚拟化硬件之上运行所有组件&#xff0c;包括其自己的操作系统。 容器之间可以共…

MySQL数据库备份并还原

使用Navicat和命令行备份并恢复数据库 第三方工具备份并恢复步骤1步骤2步骤3步骤4&#xff1a;步骤5 命令行方式备份并恢复&#xff1a;步骤1步骤2步骤3步骤4 第三方工具备份并恢复 步骤1 步骤2 在弹出的窗口上选择要备份的路径&#xff0c;单击保存&#xff0c;下图为备份完…

MySQL与Hadoop数据同步方案:Sqoop与Flume的应用探究【上进小菜猪大数据系列】

&#x1f4ec;&#x1f4ec;我是上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货&#xff0c;欢迎关注。 MySQL与Hadoop数据同步 随着大数据技术的发展&#xff0c;越来越多的企业开始采用分布式系统和云计算技术来处理和存储海量数…

物理机CentOS7.9 安装后无网卡避坑(一) 找不到网卡

1、查看物理网卡 lspci | grep -i ethernet 2、下载网卡驱动 网卡驱动链接 Index of /elrepo/elrepo/el7/x86_64/RPMS (usf.edu) 选择对应版本的驱动 3、使用U盘将下载好的网卡驱动放到新装的机器&#xff0c;任意目录。 4、检查软件安装情况&#xff1a; rpm -qa | gre…

【rust】| 03——语法基础 | 数据类型

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础_变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 前言数据类型1.…

浅析S32K324的时钟树

S32K3XX系列的时钟树梳理 如下图为S32K3XX系列的时钟树图&#xff1a; 一、时钟源 时钟源说明FIRC快速内部RC时钟源SIRC慢速内部RC时钟源FXOSC快速外部晶振时钟源SXOSC慢速外部晶振时钟源 S32K3系列的mcu有4个时钟源如上表。 二、FIRC&#xff08;快速内部RC时钟源&#…

excel中英文互译

在excel运行宏时弹出下面的提示&#xff1a; 无法运行“XXXXX”宏。可能是因为该宏在此工作薄中不可用&#xff0c;或者所有的宏都被禁用的错误提示 解决办法&#xff1a; 1、点击“文件”选项卡&#xff1b; 2、在选项卡界面窗口中选择“选项”按钮&#xff1b; 3、在“选项…

[效率工具] [VS Code] 一文玩转VSCode下的Markdown笔记

简介 Markdown 常用工具 &#xff1a; 各种云笔记优点&#xff1a;云备份,多设备同步&#xff0c;缺点是敏感字&#xff0c;图床不可外链等等。 本地常用IDE又sublime&#xff0c;Typora等等。这样造成本地会安装很多ide。像Typora后期也收费等等。所见所得等等问题&#xff0…

Nacos配置管理、配置热更新、配置共享和搭建nacos集群

目录 1.Nacos配置管理 1.1.统一配置管理 1.1.1.在nacos中添加配置文件 1.1.2.从微服务拉取配置 1.2.配置热更新 1.2.1.方式一 1.2.2.方式二 1.3.配置共享 1&#xff09;添加一个环境共享配置 2&#xff09;在user-service中读取共享配置 3&#xff09;运行两个UserAp…

面向对象【类的实例化与对象内存解析】

文章目录 类的概念对象的概念面向对象的三步骤对象的内存解析JVM 内存结构划分对象内存分析 类的概念 具有相同特征的事物的抽象描述&#xff0c;是抽象的、概念上的定义。 对象的概念 实际存在的该类事物的每个个体&#xff0c;是具体的&#xff0c;因而也称为实例。 面向…

树莓派之人脸识别与智能家居

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 树莓派加上摄像头之后就可以拍照、录视频等各种功能了&#xff0c;这样做一个树莓派相机已经是非常简单的事情了。我们在这里做一个简单的人脸区域检测的功能实验&#xff0c;然后我们在下一个实验让树莓派来控制风扇转动。发…

电机转矩、功率、转速之间的关系及计算公式

电机转矩、功率、转速之间的关系及计算公式 REF 电机功率和转矩、转速之间的关系 - 知乎 电机转矩、功率、转速、电压、电流之间关系及计算公式 - 豆丁网 电机转矩、功率、转速、电压、电流之间关系及计算公式 - 豆丁网 【技术】电动机功率、转速、扭矩的关系 实际上应该是…

系统分析师之项目管理(十七)

一、范围管理 范围管理&#xff1a;确定项目的边界&#xff0c;即哪些工作是项目应该做的&#xff0c;哪些工作不应该包括在项目中。 二、时间管理 时间管理&#xff1a;也叫进度管理&#xff0c;就是用科学的方法&#xff0c;确定目标进度&#xff0c;编制进度计划和资源供应计…

第十章 聚类算法

聚类算法 算法概括聚类&#xff08;clustering&#xff09;聚类的概念聚类的要求聚类与分类的区别 常见算法分类聚类算法中存在的问题 距离度量闵可夫斯基距离欧式距离&#xff08;欧几里得距离&#xff09;曼哈顿距离切比雪夫距离皮尔逊相关系数余弦相似度杰卡德相似系数 划分…

将本地和服务器图片上传至七牛云

少量图片上传七牛云 如果是少量图片时推荐手动上传 多张图片上传七牛云 如果是多张图片较大时&#xff0c;推荐使用七牛云官方提供工具(qshell) qshell 链接地址&#xff1a;命令行工具(qshell)_实用工具_对象存储 - 七牛开发者中心 (qiniu.com) 我们项目常用于服务器&…

JVM系列-第6章-方法区

方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal&#xff1a;如何保证多个线程在并发环境下的安全性&#xff1f;典型场景就是数据库连接管理&#xff0c;以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class …

BM61-矩阵最长递增路径

题目 给定一个 n 行 m 列矩阵 matrix &#xff0c;矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径&#xff0c;使这条路径上的元素是递增的。并输出这条最长路径的长度。 这个路径必须满足以下条件&#xff1a; 对于每个单元格&#xff0c;你可以往上&#xff…

万字长文详解如何使用Swift提高代码质量 | 京东云技术团队

前言 京喜APP最早在2019年引入了Swift&#xff0c;使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift&#xff0c;目前Swift已经支撑了70%以上的业务。通过使用Swift提高了团队内同学的开发效率&#xff0c;同时也带来了质量的提升&…

工服智能监测预警算法 yolov8

工服智能监测预警系统通过yolov8网络模型算法&#xff0c;工服智能监测预警算法对现场人员未按要求穿戴工服工装则输出报警信息&#xff0c;通知后台人员及时处理。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测&#xff0c;核心思想就是利用整张图作为网络的输入&am…

Deepmotion: AI动作捕捉和3D身体追踪技术平台

【产品介绍】 Deepmotion是一家专注于使用AI技术进行动作捕捉和3D身体追踪的公司。自2014年成立以来&#xff0c;Deepmotion一直致力于让数字角色通过智能的动作技术变得栩栩如生。 Deepmotion提供了多种与动作数据相关的服务&#xff0c;其中最引人注目的是Animate 3D&#xf…