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

  • 苹果5g开关怎么打开(苹果5g开关怎么改成4g)

    苹果5g开关怎么打开(苹果5g开关怎么改成4g)

  • reno3元气版和reno3区别(reno3元气版和reno3屏幕通用吗)

    reno3元气版和reno3区别(reno3元气版和reno3屏幕通用吗)

  • 苹果看抖音直播怎么关弹幕(苹果看抖音直播卡怎么回事)

    苹果看抖音直播怎么关弹幕(苹果看抖音直播卡怎么回事)

  • 把电话号码拉黑还能收到短信吗(把电话号码拉黑了还能打通吗)

    把电话号码拉黑还能收到短信吗(把电话号码拉黑了还能打通吗)

  • 淘宝实名认证在哪里设置(淘宝实名认证在哪里弄)

    淘宝实名认证在哪里设置(淘宝实名认证在哪里弄)

  • 苹果无线耳机掉了一个可以买一个吗(苹果无线耳机掉了别人捡到连接上会知道吗)

    苹果无线耳机掉了一个可以买一个吗(苹果无线耳机掉了别人捡到连接上会知道吗)

  • 苹果手表可以外放音乐嘛(苹果手表可以外放QQ音乐吗)

    苹果手表可以外放音乐嘛(苹果手表可以外放QQ音乐吗)

  • 拼多多黑号怎么变正常(拼多多黑号怎么换号)

    拼多多黑号怎么变正常(拼多多黑号怎么换号)

  • 手机腾讯视频怎么取消自动续费(手机腾讯视频怎么扫码登录)

    手机腾讯视频怎么取消自动续费(手机腾讯视频怎么扫码登录)

  • 应用签名异常(应用签名异常怎么解决)

    应用签名异常(应用签名异常怎么解决)

  • qq不能发闪照了吗(qq突然不能发闪照了)

    qq不能发闪照了吗(qq突然不能发闪照了)

  • 计算机存储整数最常用的方法(整数在计算机内存中以什么形式储存)

    计算机存储整数最常用的方法(整数在计算机内存中以什么形式储存)

  • 探探多少人喜欢算正常(探探多少人喜欢算正常女)

    探探多少人喜欢算正常(探探多少人喜欢算正常女)

  • 京东同城配送在哪找(京东同城配送在哪下单)

    京东同城配送在哪找(京东同城配送在哪下单)

  • 苹果7p电池更换教程(苹果7p电池更换视频教程)

    苹果7p电池更换教程(苹果7p电池更换视频教程)

  • 微信不是本人实名怎么把零钱取出来(微信不是本人实名认证的可以换成自己实名认证)

    微信不是本人实名怎么把零钱取出来(微信不是本人实名认证的可以换成自己实名认证)

  • 社区宽带延迟什么意思(社区宽带延迟50ms)

    社区宽带延迟什么意思(社区宽带延迟50ms)

  • 怎么添加共享打印机(怎么添加共享打印机win10)

    怎么添加共享打印机(怎么添加共享打印机win10)

  • 苹果前呼吸灯在哪里设置(苹果呼吸灯在哪里设置持续闪烁)

    苹果前呼吸灯在哪里设置(苹果呼吸灯在哪里设置持续闪烁)

  • docx怎样转换word文档(docx怎样转换成PPT格式)

    docx怎样转换word文档(docx怎样转换成PPT格式)

  • 换手机号了探探登不上(手机号换了怎么上探探)

    换手机号了探探登不上(手机号换了怎么上探探)

  • win10网易云音乐无法下载问题怎么办(win10网易云音乐图标)

    win10网易云音乐无法下载问题怎么办(win10网易云音乐图标)

  • p30和p20的区别(p30和p20有什么区别)

    p30和p20的区别(p30和p20有什么区别)

  • 西瓜视频怎么上传视频(打开西瓜视频app)

    西瓜视频怎么上传视频(打开西瓜视频app)

  • 【登录界面】vue、element-ui登录界面模板(vue登录页面点击登录进入首页)

    【登录界面】vue、element-ui登录界面模板(vue登录页面点击登录进入首页)

  • 行政法律法规是规定行政机关
  • 软件研发阶段和开发阶段如何区分
  • 买车哪些费用不该交
  • 劳务派遣人员保险由谁缴纳
  • 应收款和应付款对抵
  • 小规模印花税是季报还是月报
  • 被客户扣钱怎么办
  • 刷卡收手续费吗
  • 小规模纳税人生活服务业免征增值税
  • 分公司企业所得税分配比例
  • 企业所得税费用税率
  • 小规模免税农产品怎么做账
  • 政府电费补贴文件
  • 什么时候需要计提税金及附加
  • 查账征收的个体户需要申报个人所得税吗
  • 福利费进项税额转出会计分录账务处理
  • 企业转让股权收入应于转让协议生效时确认收入的实现
  • 办公室和电梯电梯哪个好
  • 注册公司之后需要交社保吗
  • 报税没有印花税怎么处理
  • 企业的不征税收入用于支出所形成
  • 发票丢失罚款标准要看金额吗
  • 装修公司购入材料计入什么科目
  • 取得免税农产品进项税转出
  • 预付账款收不到发票怎么冲账
  • 网店提现要多久能到账
  • ca证书延期不了
  • 此次新政策对原来就是小型微利企业的纳税人有影响吗?
  • 取得高新技术企业
  • 进项税转出补交的增值税和附加税可以税前扣除吗
  • 企业所得税税前扣除管理办法2018
  • windows10自带桌面时钟
  • eml文件怎么打开方式
  • 哪里有办各种真实有效的证的
  • 运输业什么进项税抵扣
  • 公司装修待摊费怎么算
  • 个人向公司借款模板
  • 旧房转让土地增值税计算案例
  • 如何认定坏账
  • 行政单位预付款已收到货物无发票
  • 财务报表分析方法有哪些?各有什么优缺点?
  • 计提固定资产折旧怎么做会计科目
  • Linux系统怎么配置IP
  • ecshop app搭建
  • js正则表达式删除特定字符
  • 补差价如何做账
  • sql server2016使用
  • A Loepa oberthuri moth (© Robert Thompson/Minden Pictures)
  • 微信小程序开发者工具
  • 微擎框架开发小程序
  • 建筑业先预缴还是先扣税
  • 企业接受捐赠怎么入账
  • dom事件种类
  • python tkinter ttk
  • phpcms v9网页禁止复制
  • 商品售后回购分录
  • 税务登记后要马上报税吗
  • 只有进项税需要结转吗
  • 税率变更对企业的影响
  • 某企业2013年12月30日购入一台不需要安装的设备
  • 3%减按2%征收增值税是什么意思
  • 其他非流动资产减少的原因
  • 公司购买的家电怎么入账
  • 股票股利应该何时分摊
  • 机票退票费计入什么科目
  • mac下安装python
  • winxp开机黑屏只有光标
  • win10专业版装不上m1136驱动
  • win7 c盘打不开
  • cocos做游戏
  • 如何使用灭火器
  • perl命令
  • jquery图片轮播无缝连接
  • 查看系统网络连接数
  • js函数详解
  • css旋转木马
  • unity3d跑酷游戏教程
  • 江苏发票真伪查询系统官网
  • 小规模年度财务报表
  • 各种税务申报时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设