十一、【React-Router6】Hooks 汇总

news/2024/10/31 3:22:19/

文章目录

1.useRoutes()
2. useNavigate()
3. useParams()
4. useSearchParams()
5. useLocation()
6. useMatch()
7. useInRouterContext()
8. useNavigationType()
9. useOutlet()
10. useResolvedPath()

1、useRoutes()

  • 根据路由表,动态创建 <Routes><Route>

  • import { useRoutes } from 'react-router-dom'// 定义路由表
    const elements = useRoutes([{path: '/about',element: <About />
    }, {path: '/home',element: <Home />
    }, {path: '/',element: <Navigate to='/about' />
    }])// 在配置路由管理的地方直接插入即可
    {elements}// 子路由直接使用<Outlet/> 标签占位即可
    <Outlet/>
    

2、useNavigate()

  • 返回一个函数用来实现编程式路由导航

  • import { useNavigate } from 'react-router-dom'navigat('detail', {replace: false,state: message
    })
    

3、useParams()

  • 接收当前路由的 params 参数,对标 5 路由组件的 match.params

  • import { useParams } from 'react-router-dom'const { x, xx, xxx } = useParams()// 也可以用 useMatch 但是正常人不会用的,因为它需要传入全路径:
    // useMatch('/home/message/detail/:id/:title/:info')
    

4、useSearchParams()

  • 用于读取和修改当前路由 URL 中的查询字符串(就是search参数)

  • 返回一个包含两个值的数组:当前search集合,更新search集合的函数

  • import { useSearchParams } from 'react-router-dom'// 获取search参数
    const [search, setSearch] = useSearchParams()
    const x = search.get('x')
    const xx = search.get('xx')
    const xxx = search.get('xxx')// 修改search参数
    setSearch('x=5000&xx=新标题&xxx=小猪佩奇')
    

5、useLocation()

  • 获取当前路由 loacation 值,对标 5 路由组件的 location 属性

  • import { useLocation } from 'react-router-dom'// 直接连续结构获取 location 中的 state 的属性
    const { state: { id, title, info } } = useLocation()
    

6、useMatch()

  • 返回当前匹配信息,对标 5 路由组件的 match 属性

  • 非特殊情况正常人不会用的,因为它需要传入全路径:

  • // 路由配置
    <Route path='/home/message/detail/:id/:title/:info' element={<Message/>}/>// Message组件引入 useParams
    import { useParams } from 'react-router-dom'
    // Message组件获取匹配信息
    const match = useMatch('/home/message/detail/:id/:title/:info')// match 对象输出如下(其他方式传参pathxxx不会有后缀)
    {params:  {},pathname: "/home/message/detail/x/xx/xxx",pathnameBase: "/home/message/detail/x/xx/xxx",pattern: {path: "/home/message/detail/:id/:title/:info"caseSensitive: false,end: true,}
    }
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5cky9JS-1670030848477)(react_router_6.assets/image-20221203092512690.png)]

7、useInRouterContext()

  • 如果组件在 Router 的上下文中呈现(处在路由组件内),则 useInRouterContext() 钩子返回 true,否则返回 false

8、useNavigationType()

  • 返回当前的导航类型(用户是如何来到当前页面的)
  • 返回值:POPPUSHREPLACE
  • 备注:POP是指在浏览器中直接打开了这个路由组件(刷新页面或者路由首页)

9、useOutlet()

  • 用来呈现当前组件中要渲染的嵌套路由
const result = useOutlet()
// 如果嵌套路由没挂载:null
// 如果嵌套路由已挂载:嵌套路由对象

10、useResolvedPath()

  • 给定一个URL值,解析其中的 path、search、hash 值

http://www.ppmy.cn/news/1081.html

相关文章

switch case与while语句练习

switch case 选择 假设用1&#xff0c;2。。。。7分别表示星期一。。。。星期天&#xff0c;现输入一个数字&#xff0c;输出对应的星期几。比如&#xff1a;输入3&#xff0c;则输出“星期三” #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() {int d…

基于HFSS的线阵综合分析

摘要&#xff1a; 常规的阵列天线方向图综合是基于阵因子分析法&#xff0c;且不考虑单元之间电磁耦合的一种快速分析手段。本次推文则简单阐述一个基于HFSS的线阵综合实例。 HFSS中的直线阵 均匀直线阵的基础知识已在前面的推文中进行了多次阐述举例&#xff0c;这里就不赘…

第五周 丹巴晨景——跟随光线,渲染照片氛围

目录5.1 尽可能的运用光线&#xff0c;晨景与星空5.2 不同光线的造型特点5.3 色彩的魅力课件光线作业5.1 尽可能的运用光线&#xff0c;晨景与星空 甘孜州 折多山垭口 新都桥镇 塔公草原 藏寨 中国最美丽的乡村——丹巴(四川省) 光影比较明显的地方 暗&#xff0c;则延长曝光时…

matlab测量计算信号的相似度

本示例说明如何测量信号相似度。最近我们被客户要求撰写关于计算信号的相似度的研究报告&#xff0c;包括一些图形和统计输出。 将回答以下问题&#xff1a;如何比较具有不同长度或不同采样率的信号&#xff1f;如何确定测量中是否存在信号或仅有噪声&#xff1f;有两个信号…

嵌入式 ADC使用手册完整版 (188977万字)(附源码详细篇)

嵌入式 ADC使用手册完整版 &#xff08;188977万字&#xff09;&#x1f49c;&#xff08;附源码详细篇&#xff09;&#x1f49c;【1】ADC简介【2】ADC主要特征【3】ADC引脚和内部信号【4】ADC 模块框图【5】ADC校准&#xff08;CLB&#xff09;【6】ADC 时钟【7】ADCON 开关【…

VUE+Spring Boot前后端分离开发实战(一):基于SpringBoot+Mybatis-plus+JWT+shiro+mysql后端登录接口实现

文章目录 前言前端后端相关依赖数据库设计编码实现项目结构整合Mybatis整合shiro+JWT定义相关类token工具类jwt 相关类和shiro相关shiro配置类实现登录postMan测试接口说明前言 本专栏技术栈: 前端 vueelement UIvuexaxiosrouter后端 sprin

MySQL8高级

MySQL8高级 一、Linux下MySQL的安装与使用 1、版本说明 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff0c;适用于大多数普通用户。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;不能…

计算机图形学中需要掌握的数学基础知识有哪些?

计算机图形学中使用了大量数学知识&#xff0c;尤其是矩阵和线性代数。虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一&#xff08;它在很多方面确实是&#xff09;&#xff0c;但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复兴时期的伟大哲学家们…