位置: 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计数器指令程序)

  • 快手私信一天上限多少(快手一天能私信多少人有数量限制吗)

    快手私信一天上限多少(快手一天能私信多少人有数量限制吗)

  • 有微信支付如何加微信号(微信支付如何设置零钱优先)

    有微信支付如何加微信号(微信支付如何设置零钱优先)

  • 蚂蚁庄园怎样获得福卡(蚂蚁庄园怎样获得饲料)

    蚂蚁庄园怎样获得福卡(蚂蚁庄园怎样获得饲料)

  • ios13息屏显示在哪(苹果13屏息显示)

    ios13息屏显示在哪(苹果13屏息显示)

  • 华为mate30为什么后面四个孔只有三个摄像头(华为mate30为什么耳机没有声音)

    华为mate30为什么后面四个孔只有三个摄像头(华为mate30为什么耳机没有声音)

  • 操作系统的三个作用是什么(操作系统的三个基本类型)

    操作系统的三个作用是什么(操作系统的三个基本类型)

  • 100多的耳机需要煲机吗(一百多的耳机有必要上耳放吗)

    100多的耳机需要煲机吗(一百多的耳机有必要上耳放吗)

  • 知乎可以通过手机号找人吗(知乎可以搜索手机联系人吗)

    知乎可以通过手机号找人吗(知乎可以搜索手机联系人吗)

  • qq群里完成作业别人看到吗(qq群里完成作业看不到视频只有听到声音)

    qq群里完成作业别人看到吗(qq群里完成作业看不到视频只有听到声音)

  • 虎牙直播公会等级区分(虎牙直播进公会)

    虎牙直播公会等级区分(虎牙直播进公会)

  • facetime拒接显示什么(facetime对方没接会看到你吗)

    facetime拒接显示什么(facetime对方没接会看到你吗)

  • ctrl+S什么意思

    ctrl+S什么意思

  • 小米8多长(小米8多长时间换电池)

    小米8多长(小米8多长时间换电池)

  • 苹果xs充电多久充满(苹果xs充电多久能充满)

    苹果xs充电多久充满(苹果xs充电多久能充满)

  • 申诉不成功如何找回QQ密码(申诉不成功如何找回微信密码)

    申诉不成功如何找回QQ密码(申诉不成功如何找回微信密码)

  • 爱奇艺电视vip老是掉线(爱奇艺电视端vip)

    爱奇艺电视vip老是掉线(爱奇艺电视端vip)

  • 手机屏幕右上角显示一个HD是什么意思(手机屏幕右上角出现一个圆圈中间有一横)

    手机屏幕右上角显示一个HD是什么意思(手机屏幕右上角出现一个圆圈中间有一横)

  • 苹果11mw开头的是什么版本(苹果11mw开头的型号)

    苹果11mw开头的是什么版本(苹果11mw开头的型号)

  • vivos5怎么拉黑联系人(vivo手机怎么拉黑名单?)

    vivos5怎么拉黑联系人(vivo手机怎么拉黑名单?)

  • 没电脑怎么下爱思助手(没电脑怎么下爱思极速版)

    没电脑怎么下爱思助手(没电脑怎么下爱思极速版)

  • 如何关闭蓝牙呼吸灯(怎么关闭蓝牙唤醒)

    如何关闭蓝牙呼吸灯(怎么关闭蓝牙唤醒)

  • 笔记本连显示器用什么线(笔记本连显示器老是黑屏)

    笔记本连显示器用什么线(笔记本连显示器老是黑屏)

  • intel80286是多少位的(intel80386)

    intel80286是多少位的(intel80386)

  • wifi密码设置(wifi密码设置网址)

    wifi密码设置(wifi密码设置网址)

  • 报错ValidationError: Progress Plugin Invalid Options(报错专业怎么补救)

    报错ValidationError: Progress Plugin Invalid Options(报错专业怎么补救)

  • Django_request学习(django中httpresponse)

    Django_request学习(django中httpresponse)

  • 计算本月所得税税率为25%
  • 应交增值税二级科目借贷方向
  • 一般纳税人房租费的税率是多少
  • 内涵报酬率和必要投资报酬率
  • 如何查询一个公司的资质情况
  • 残保基金的计算公式
  • 资产损失原因
  • 写字楼注册公司对面积有要求吗
  • 物业公司转售电费怎么开票
  • 公司贷款直接打供应商账户还需要发票吗
  • 房地产企业预缴税费
  • 企业法人不是实际老板怎么办
  • 小规模纳税人可以抵扣进项税吗
  • 增值税抵扣期限多少天
  • 生产企业上税如何计算?
  • 注销一定要去营业厅吗
  • 小额纳税人可以开6%专票吗
  • 下雨被水淹
  • 定率征收怎么申报
  • 注册中的商标转让
  • 企业收到政府补贴100000元业务题
  • 生产型企业进口退税政策
  • 申报个税是按哪个月的工资表
  • 上个月多计提的费用怎么调整
  • 简介linux系统中的10个常用命令及功能
  • laravel5 使用try catch的实例详解
  • 试乘试驾车好不好
  • php实现的任意进程函数
  • 委托贷款账务处理
  • 有限责任公司股东对公司债务承担
  • 笑脸热气球 (© Leonsbox/Getty Images Plus)
  • 普通发票的开票规定
  • 模拟电子技术基础知识点总结
  • node与nodejs
  • Es6的新特性promise对象的设计初衷是
  • 网络请求失败什么意思
  • 关联公司代缴社保会计处理
  • 稿费演出费等劳务收入算工资吗
  • 工资计提和发放能不能在一个月
  • 帝国cms会员注册天数自动升级会员组
  • 文化传媒公司介绍
  • 定金罚则可以约定吗
  • 存货盘亏毁损处理方法
  • 商誉必须减值吗
  • 固定资产报废处置的请示
  • 国际货运代理企业不得从事的业务是
  • 公允模式投资性房地产转固定资产
  • 工伤鉴定费计入什么科目
  • 小规模纳税人国税地税都要交吗
  • 暂估费用的会计分录
  • 出口应纳增值税
  • 党费结余如何计算
  • 内账价税分离如何做账
  • 怎样把有余额的钱取出来
  • sqlserver数据库建库建表
  • 安装并激活navicat
  • 操作系统与硬件之间的关系
  • 方正怎么从u盘进pe
  • windows server 2016正式版下载激活安装设置教程
  • centos7 中文支持
  • 在u盘里装win7
  • spybotsd.exe - spybotsd 是什么文件进程
  • 打开本地搜索
  • windows自动启动设置
  • mac系统怎么设置默认应用
  • Linux系统下的Samba客户端配置
  • linux跨服务器调用shell脚本
  • 基于android的app
  • 可以在windows环境下双击而直接放映
  • 新版unity
  • Python文本相似性计算之编辑距离详解
  • js知识总结
  • 出租车票据国税怎么开
  • 外经证的有效期是多久
  • 成品油消费税税率包括哪些
  • 增值额未超过扣除项目金额20%是什么意思
  • 增值税税控开票软件密码不知道了怎么办
  • 江之都财税服务集团有限公司是私企吗
  • 信用体系建设
  • 交通运输业包含哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设