位置: IT常识 - 正文

React中路由的参数传递 - 路由的配置文件(react中路由有哪些常用组件)

编辑:rootadmin
React中路由的参数传递 - 路由的配置文件 文章目录路由的参数传递路由的配置文件路由的参数传递

推荐整理分享React中路由的参数传递 - 路由的配置文件(react中路由有哪些常用组件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react路由的原理,react路由传参数,react路由传参数,react路由exact,react项目路由配置,react路由表,react路由表,react中路由有哪些常用组件,内容如对您有帮助,希望把文章链接给更多的朋友!

传递参数有二种方式(需要注意的是, 这两种方式在Router6.x中都是提供的hook函数的API, 类组件需要通过高阶组件的方式使用):

动态路由的方式;

search传递参数(查询字符串);

方式一: 动态路由的概念指的是路由中的路径并不会固定:

比如/detail的path对应一个组件Detail;

如果我们将path在Route匹配时写成/detail/:id,那么 /detail/111、/detail/123都可以匹配到该Route,并且进行显示;

这个匹配规则,我们就称之为动态路由;

React中路由的参数传递 - 路由的配置文件(react中路由有哪些常用组件)

通常情况下,使用动态路由可以为路由传递参数。

配置动态路由render() { return ( <div className='app'> <div className='header'> <Link to="detail/123">详情123</Link> <Link to="detail/321">详情321</Link> <Link to="detail/aaa">详情aaa</Link> </div> <div className='counter'> <Routes> <Route path='/detail/:id' element={<Detail/>}/> </Routes> </div> <div className='footer'>footer</div> </div> )}在跳转的页面中可以通过hook函数useParms获取到传入的id, 由于我们现在使用的是类组件, 无法使用hook函数, 因此需要通过高阶组件对当前组件增强(上一篇刚刚讲过高阶组件的封装, 这里直接使用, 给到大家代码)import { useNavigate, useParams } from "react-router-dom"export default function withRouter(WrapperComponent) { return function(props) { const naviagte = useNavigate() const params = useParams() const router = {naviagte, params} return <WrapperComponent {...props} router={router} /> }}使用高阶组件增强当前Detail组件, 就可以通过useParams获取到传递的idimport React, { PureComponent } from 'react'import withRouter from '../hoc/with_router'export class Detail extends PureComponent { render() { // 获取到params const { params } = this.props.router return ( <div> <h2>Detail</h2> {/* 通过params获取到id并展示 */} <h2>id: {params.id}</h2> </div> ) }}export default withRouter(Detail)

方式二: search传递参数(也就是查询字符串的方式), 这里在User组件中进行演示

在路由跳转时拼接上查询字符串render() { return ( <div className='app'> <div className='header'> <Link to="/user?name=chenyq&age=18&height=1.88">用户</Link> </div> <div className='counter'> <Routes> <Route path='/user' element={<User/>} /> </Routes> </div> <div className='footer'>footer</div> </div> )}查询字符串需要通过hook函数useSearchParams获取, 所以我们也需要使用高阶组件对User组件进行增强// 封装的高阶组件import { useNavigate, useParams, useSearchParams } from "react-router-dom"export default function withRouter(WrapperComponent) { return function(props) { // 1.导航 const naviagte = useNavigate() // 2.动态路由的参数 const params = useParams() // 3.查询字符串的参数 const [searchParams] = useSearchParams() const query = Object.fromEntries(searchParams.entries) const router = {naviagte, params, query} return <WrapperComponent {...props} router={router} /> }}在组件中就可以获取到参数import React, { PureComponent } from 'react'import withRouter from '../hoc/with_router'export class User extends PureComponent { render() { // 获取高阶组件中的query const { query } = this.props.router return ( <div> <h2>User</h2> {/* 通过query获取参数 */} <h2>参数: {query.name}-{query.age}-{query.height}</h2> </div> ) }}export default withRouter(User)路由的配置文件

目前我们所有的路由定义都是直接使用Route组件,并且添加属性来完成的。

但是这样的方式会让路由变得非常混乱,我们希望像vue-router那样, 将所有的路由配置放到一个单独的文件进行集中管理:

在早期的时候,Router并且没有提供相关的API,我们需要借助于react-router-config完成;

在Router6.x中,为我们提供了useRoutes API可以完成相关的配置;

例如我们将下面的映射关系配置到一个单独的文件中

<div className='counter'> <Routes> {/* 当默认路径 / 时, 重定向到home页面 */} <Route path='/' element={<Navigate to="/home"/>}></Route> {/* 配置二级路由 */} <Route path='/home' element={<Home/>}> <Route path='/home' element={<Navigate to="/home/recommend"/>}/> <Route path='/home/recommend' element={<HomeRecommend/>}/> <Route path='home/ranking' element={<HomeRanking/>}/> </Route> <Route path='/about' element={<About/>}/> <Route path='/profile' element={<Profile/>}/> <Route path='/category' element={<Category/>}/> <Route path='/order' element={<Order/>}/> <Route path='/detail/:id' element={<Detail/>}/> <Route path='/user' element={<User/>} /> {/* 当上面路径都没有匹配到时, 显式Notfound组件 */} <Route path='*' element={<Notfound/>}/> </Routes></div>

首先, 使用useRoutes这个API替代原来的Routes和Route组件, useRoutes可以当成一个函数直接使用, 但是只能在函数组件中使用

<div className='counter'> {useRoutes(routes)}</div>

再在route/index.js中对映射关系进行配置

import { Navigate } from "react-router-dom"import Home from '../pages/Home'import About from '../pages/About'import Profile from '../pages/Profile'import Notfound from '../pages/Notfound'import HomeRecommend from '../pages/HomeRecommend'import HomeRanking from '../pages/HomeRanking'import Category from '../pages/Category'import Order from '../pages/Order'import Detail from '../pages/Detail'import User from '../pages/User'const routes = [ { path: "/", element: <Navigate to="/home"/> }, { path: "/home", element: <Home/>, children: [ { path: "/home", element: <Navigate to="/home/recommend" /> }, { path: "/home/recommend", element: <HomeRecommend/> }, { path: "/home/ranking", element: <HomeRanking/> } ] }, { path: "/about", element: <About/> }, { path: "/profile", element: <Profile/> }, { path: "/category", element: <Category/> }, { path: "/order", element: <Order/> }, { path: "detail/:id", element: <Detail/> }, { path: "/user", element: <User/> }, { path: "*", element: <Notfound/> }]export default routes

如果我们对某些组件进行了异步加载(懒加载, 分包处理),那么需要使用Suspense进行包裹:

例如我们对Detail和User进行懒加载(分包处理)

// import Detail from '../pages/Detail'// import User from '../pages/User'const Detail = React.lazy(() => import("../pages/Detail"))const User = React.lazy(() => import("../pages/User"))

并且还需要使用Suspense对组件进行包裹

root.render( <HashRouter> <Suspense fallback={<h3>loading</h3>}> <App/> </Suspense> </HashRouter>)
本文链接地址:https://www.jiuchutong.com/zhishi/293073.html 转载请保留说明!

上一篇:网站百度统计被恶意刷广告的处理方法(百度统计网址)

下一篇:bc命令 数字计算器(ab计数器指令程序)

  • 徕卡r502评价(徕卡r50)(徕卡r50f2)

    徕卡r502评价(徕卡r50)(徕卡r50f2)

  • 快手怎么弄情侣空间(快手怎么弄情侣头像)

    快手怎么弄情侣空间(快手怎么弄情侣头像)

  • 腾讯视频如何添加到相册(腾讯视频如何添加虚拟背景)

    腾讯视频如何添加到相册(腾讯视频如何添加虚拟背景)

  • 为什么手机发烫了以前都不会(为什么手机发烫就掉帧)

    为什么手机发烫了以前都不会(为什么手机发烫就掉帧)

  • 三星s8怎样退出安全模式(三星s8怎样退出应用)

    三星s8怎样退出安全模式(三星s8怎样退出应用)

  • 手机处理器太低能换吗(手机处理器太低玩游戏卡怎么办)

    手机处理器太低能换吗(手机处理器太低玩游戏卡怎么办)

  • 魅族m621q是什么型号(魅族手机m621q是什么型号)

    魅族m621q是什么型号(魅族手机m621q是什么型号)

  • 手机右下角有个小人是什么意思(手机右下角有个小人图标怎么取消)

    手机右下角有个小人是什么意思(手机右下角有个小人图标怎么取消)

  • ipad一年内换新机条件(苹果平板一年换新什么意思)

    ipad一年内换新机条件(苹果平板一年换新什么意思)

  • 戴尔新电脑耗电很快正常么(戴尔电脑耗电快)

    戴尔新电脑耗电很快正常么(戴尔电脑耗电快)

  • 华为nova5有什么特色功能(华为nova5有什么颜色)

    华为nova5有什么特色功能(华为nova5有什么颜色)

  • excel表格内文字怎么换行(excel表格内文字行间距怎么设置)

    excel表格内文字怎么换行(excel表格内文字行间距怎么设置)

  • 抖音账号被封禁解决方法(抖音被永久封禁如何注销账号)

    抖音账号被封禁解决方法(抖音被永久封禁如何注销账号)

  • 拼多多能和陌生人拼吗(拼多多能和陌生人私聊吗)

    拼多多能和陌生人拼吗(拼多多能和陌生人私聊吗)

  • 苹果x密码忘了怎么解锁(苹果x密码忘了怎么恢复出厂设置)

    苹果x密码忘了怎么解锁(苹果x密码忘了怎么恢复出厂设置)

  • 小米手环3怎么看微信内容(小米手环3怎么充电)

    小米手环3怎么看微信内容(小米手环3怎么充电)

  • 什么是代理服务器(什么是代理服务类社会中介组织)

    什么是代理服务器(什么是代理服务类社会中介组织)

  • 小度在家能当监控吗(小度在家能当监控摄像头用吗怎么开没有显示屏)

    小度在家能当监控吗(小度在家能当监控摄像头用吗怎么开没有显示屏)

  • 雷蛇键盘失灵(雷蛇键盘失灵乱打字)

    雷蛇键盘失灵(雷蛇键盘失灵乱打字)

  • 桌面时间日期天气显示(桌面时间日期天气显示怎样恢复)

    桌面时间日期天气显示(桌面时间日期天气显示怎样恢复)

  • 腾讯视频qq登不上(腾讯视频QQ登不上是怎么回事)

    腾讯视频qq登不上(腾讯视频QQ登不上是怎么回事)

  • 电脑前面板耳机没声音设置方法(电脑前面板耳机没声音怎么设置bios)

    电脑前面板耳机没声音设置方法(电脑前面板耳机没声音怎么设置bios)

  • 个人所得税退税是什么意思?
  • 小规模纳税人印花税怎样计算
  • 收到以前年度退所得税分录
  • 进口关税怎么做分录
  • 车船税是什么意思图片
  • 不动产租赁开票税目
  • 库存商品结转成本摘要怎么写
  • 未达起征点的增值税怎么做账
  • 应收利息和利息收入的关系
  • 冲减收入怎么做账
  • 合同和发票计量一样吗
  • 出售的固定资产当月计提折旧吗
  • 固定资产怎么确认是不是投入使用了
  • 适用于6%税率的优惠
  • 税务筹划有哪些内容
  • 进口商品不提供发票合法吗
  • 营业外收入的核算内容主要有哪些
  • 分配股利需要缴纳个税吗
  • 第三方汽车贷款平台有哪些
  • 3%征收率的应税服务
  • 注册了店面没有营业执照
  • 减免教育费附加和地方教育费附加账务处理
  • 企业押金怎么管理
  • windows 11怎么用
  • 为什么链接网线后无法链接网络
  • win7如何禁用wifi
  • linux怎么设置读写权限
  • 其他暂收应付款项有哪些
  • mac桌面的东西怎么放回去
  • 购入专利权的会计科目
  • 会计科目明细分类科目表
  • 期末结转之前有哪些注意事项
  • 企业发生的间接费用应先在
  • 环境检测费做什么科目
  • 浏览器windows下载
  • three.js 入门
  • PHP编写1+到100
  • 茶叶一般开多少度保存
  • 什么情况下应该辞职
  • 赔偿的费用
  • 资产负债表日后至财务报告批准报出日之间
  • 加工企业进项发票有哪些
  • 报关单填制相关规范相关文件
  • 普通发票上的银行账户有规定吗
  • 加油的电子发票在哪里找
  • 配置英文
  • 基建罚款支出计算方法
  • 记账凭证摘要的填写要求有
  • 公对公转账货款写成了往来款怎么办
  • 小微企业社保代缴
  • 工程安装公司注册条件
  • 代收水电费如何入账
  • 金税盘税费减免分录
  • 员工预支工资现金流量
  • 总产值的计算方法是什么
  • 实务操作中如何快速记忆
  • 企业股东的出资方式
  • 私营公司应付工资的规定
  • 商业企业所有者的权益
  • windows开始菜单在哪里
  • win7系统一键还原方法
  • 苹果mac 最新系统
  • freebsd11.3安装教程
  • ubuntu左侧菜单不见了
  • bhvc.exe
  • 电脑一直显示windowsxp怎么办
  • python如何搭建环境
  • Qt Quick + OpenGL + Bullet初次测试
  • html里id
  • linux shell有什么用
  • unity gpu优化
  • python线程启动和暂停
  • javascript基础入门视频教程
  • python截屏幕的图
  • javascript中继承
  • python数据类型详细介绍
  • 湖北省国家税务总局
  • 税务检查调账通知书
  • 贵阳市税务稽查
  • 预缴增值税是否要预缴城建税及附加
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设