位置: IT常识 - 正文

React - Router的基本使用介绍(react_router)

编辑:rootadmin
React - Router的基本使用介绍 文章目录Router的基本使用介绍认识React-RouterRouter的组件APIRouter的映射配置Router配置和跳转Navigate组件使用Not Found页面配置Router的基本使用介绍认识React-Router

推荐整理分享React - Router的基本使用介绍(react_router),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react router onenter,react router作用,react router prompt,react router withrouter,react router onenter,reactrouter的基本用法,react router withrouter,react router route,内容如对您有帮助,希望把文章链接给更多的朋友!

目前前端流行的三大框架, 都有自己的路由实现:

Angular的ngRouter

React的ReactRouter

Vue的vue-router

React Router在最近两年版本更新的较快,并且在最新的React Router6.x版本中发生了较大的变化。

目前React Router6.x已经非常稳定,我们可以放心的使用;

说明一下, Router4.x和Router5.x的区别是不大的, 而Router6.x就有些区别, 所以Router系列的文章主要针对Router6.x进行讲解, 当有与4或5版本不同的地方时会单独强调

安装React Router:

安装时,我们选择安装react-router-dom, npm install react-router-dom;

因为react-router会包含一些react-native的内容,web开发并不需要;

Router的组件API

react-router最主要的API是给我们提供的一些组件:

BrowserRouter或HashRouter

Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件;

BrowserRouter使用history模式;

import React from "react"import ReactDOM from "react-dom/client"import { BrowserRouter } from "react-router-dom"import App from "./App"const root = ReactDOM.createRoot(document.querySelector("#root"))root.render( <BrowserRouter> <App/> </BrowserRouter>)

HashRouter使用hash模式

import React from "react"import ReactDOM from "react-dom/client"import { HashRouter } from "react-router-dom"import App from "./App"const root = ReactDOM.createRoot(document.querySelector("#root"))root.render( <HashRouter> <App/> </HashRouter>)Router的映射配置

Routes:包裹所有的Route,在其中匹配一个路由

Router6.x使用的是Routes组件

Router5.x使用的是Switch组件

Route:Route用于路径的匹配;

Router6.x不允许Router组件单独存在

path属性: 用于设置匹配到的路径;

React - Router的基本使用介绍(react_router)

element属性: 设置匹配到路径后,渲染的组件;

Router5.x使用的是component属性

exact: 精准匹配,只有精准匹配到完全一致的路径,才会渲染对应的组件;

Router6.x不再支持该属性<div className='app'> <div className='header'>header</div> <div className='counter'> <Routes> <Route path='/' element={<Home/>}/> <Route path='/about' element={<About/>}/> <Route path='/profile' element={<Profile/>}/> </Routes> </div> <div className='footer'>footer</div></div>Router配置和跳转

Link组件:

通常路径的跳转是使用Link组件,这个组件最终会被渲染成a元素;

NavLink是在Link基础之上增加了一些样式属性(后续会讲解);

to属性: Link中最重要的属性,用于设置跳转到的路径

例如实现上面代码, 我们在header中实现点击按钮切换页面的效果

<div className='app'> <div className='header'> <Link to="/">首页</Link> <Link to="/about">关于</Link> <Link to="/profile">我的</Link> </div> <div className='counter'> <Routes> <Route path='/' element={<Home/>}/> <Route path='/about' element={<About/>}/> <Route path='/profile' element={<Profile/>}/> </Routes> </div> <div className='footer'>footer</div></div>

NavLink组件

需求:路径选中时,对应的a元素的文字变为红色

这个时候,我们要使用NavLink组件来替代Link组件, NavLink组件选中时, 有添加一个类(这个组件了解即可, 不如自己控制更方便):

事实上在默认匹配成功时,NavLink就会动态的添加上一个class: active , 选中的时候就会添加;

所以我们也可以直接编写样式

当然,如果你担心这个class在其他地方被使用了,出现样式的层叠,也可以自定义class和动态添加样式

style属性: 传入一个函数,函数的参数接收一个对象,该对象包含isActive属性

<NavLink to="/" style={({ isActive }) => ({color: isActive ? "red" : ""})}>首页</NavLink><NavLink to="/about" style={({ isActive }) => ({color: isActive ? "red" : ""})}>关于</NavLink><NavLink to="/profile" style={({ isActive }) => ({color: isActive ? "red" : ""})}>我的</NavLink>

className:传入一个函数,函数的参数接受一个对象,该对象包含isActive属性

<NavLink to="/" className={({ isActive }) => isActive ? "my-class" : ""}>首页</NavLink><NavLink to="/about" className={({ isActive }) => isActive ? "my-class" : ""}>关于</NavLink><NavLink to="/profile" className={({ isActive }) => isActive ? "my-class" : ""}>我的</NavLink>Navigate组件使用

Navigate用于路由的重定向,当这个组件出现时,就会执行跳转到对应的to路径中:

我们这里使用这个的一个案例:

用户跳转到Profile界面;

但是在Profile界面有一个isLogin用于记录用户是否登录:

true: 表示已登录, 跳转到首页;false: 表示未登录, 显式登录按钮;export class Profile extends PureComponent { constructor(props) { super(props) this.state = { isLogin: false } } login() { this.setState({ isLogin: true }) } render() { const { isLogin } = this.state console.log(isLogin) return ( <div> <h2>Profile</h2> {/* 为true时重定向到首页 */} {isLogin ? <Navigate to="/home" /> : <button onClick={() => this.login()}>登录</button>} </div> ) }}

我们也可以在匹配到 “/” 的时候,直接跳转到 “/home” 页面

<Routes> {/* 当默认路径 / 时, 重定向到home页面 */} <Route path='/' element={<Navigate to="/home"/>}></Route> <Route path='/home' element={<Home/>}/> <Route path='/about' element={<About/>}/> <Route path='/profile' element={<Profile/>}/></Routes>Not Found页面配置

如果用户随意输入一个地址,该地址无法匹配,那么在路由匹配的位置将什么内容都不显示。

很多时候,我们希望在这种情况下,让用户看到一个Not Found的页面。

这个过程非常简单:

开发一个Not Found页面;

配置对应的Route,并且设置path为*即可;

<Routes> {/* 当默认路径 / 时, 重定向到home页面 */} <Route path='/' element={<Navigate to="/home"/>}></Route> <Route path='/home' element={<Home/>}/> <Route path='/about' element={<About/>}/> <Route path='/profile' element={<Profile/>}/> {/* 当上面路径都没有匹配到时, 显式Notfound组件 */} <Route path='*' element={<Notfound/>}/></Routes>
本文链接地址:https://www.jiuchutong.com/zhishi/300455.html 转载请保留说明!

上一篇:结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)(结构体基本知识)

下一篇:猿创征文|信息抽取(2)——pytorch实现Bert-BiLSTM-CRF、Bert-CRF模型进行实体抽取(猿创部落是干什么的)

  • 复制和粘贴快捷键ctrl加什么(复制和粘贴快捷键用不了)

    复制和粘贴快捷键ctrl加什么(复制和粘贴快捷键用不了)

  • 苹果11手机如何应用分身(苹果11手机如何滚动截屏长图)

    苹果11手机如何应用分身(苹果11手机如何滚动截屏长图)

  • 苹果11pro屏幕是几寸(苹果11pro屏幕是lcd还是oled)

    苹果11pro屏幕是几寸(苹果11pro屏幕是lcd还是oled)

  • 华为有镜像投屏吗(华为镜像投屏怎么弄)

    华为有镜像投屏吗(华为镜像投屏怎么弄)

  • 快手极速版怎么看点赞的视频(快手极速版怎么找回)

    快手极速版怎么看点赞的视频(快手极速版怎么找回)

  • 华为手机字体变小怎么调(华为手机字体变小了怎么回事)

    华为手机字体变小怎么调(华为手机字体变小了怎么回事)

  • iphone7无法安装ios13(iphone7无法安装软件)

    iphone7无法安装ios13(iphone7无法安装软件)

  • qq和微信的步数不一致原因(qq步数与微信步数相差太多)

    qq和微信的步数不一致原因(qq步数与微信步数相差太多)

  • 抖音修改昵称怎么一直修改不过来(抖音修改昵称怎么一直修改不过来?平果手机)

    抖音修改昵称怎么一直修改不过来(抖音修改昵称怎么一直修改不过来?平果手机)

  • 拼多多免拼成功什么意思(拼多多免拼成功怎么取消订单)

    拼多多免拼成功什么意思(拼多多免拼成功怎么取消订单)

  • qq作业有时间限制吗(qq作业超时怎么办)

    qq作业有时间限制吗(qq作业超时怎么办)

  • 快手看直播怎么清屏不看评论(快手看直播怎么没有弹幕)

    快手看直播怎么清屏不看评论(快手看直播怎么没有弹幕)

  • 什么是虚拟号码(什么是虚拟号码,可以打电话吗)

    什么是虚拟号码(什么是虚拟号码,可以打电话吗)

  • nova5和nova6区别(华为nova5和华为nova 6有什么区别)

    nova5和nova6区别(华为nova5和华为nova 6有什么区别)

  • 春节期间淘宝有哪些运营方式(春节期间淘宝有什么活动)

    春节期间淘宝有哪些运营方式(春节期间淘宝有什么活动)

  • 手机qq天气怎么关闭(手机qq天气怎么显示出来的)

    手机qq天气怎么关闭(手机qq天气怎么显示出来的)

  • 手机怎么设置来电动画(手机怎么设置来信息不显示内容)

    手机怎么设置来电动画(手机怎么设置来信息不显示内容)

  • pr如何给视频添加音频(pr如何给视频添加背景)

    pr如何给视频添加音频(pr如何给视频添加背景)

  • 全民k歌调音台怎么调好听(全民k歌调音台自定义怎么调)

    全民k歌调音台怎么调好听(全民k歌调音台自定义怎么调)

  • 苹果xrsiri在哪里

    苹果xrsiri在哪里

  • qq手势密码怎么弄指纹(qq手势密码怎么解除)

    qq手势密码怎么弄指纹(qq手势密码怎么解除)

  • 相互保可以保障多少(相互保可以保多久)

    相互保可以保障多少(相互保可以保多久)

  • 手机数据线接口类型(手机数据线接口发烫还能用吗)

    手机数据线接口类型(手机数据线接口发烫还能用吗)

  • 勃朗峰高山冰川上的徒步者,法国夏慕尼 (© agustavop/Getty Images)(勃朗峰高度)

    勃朗峰高山冰川上的徒步者,法国夏慕尼 (© agustavop/Getty Images)(勃朗峰高度)

  • 资产损失税前扣除及纳税调整明细表
  • 房产税城镇土地使用税税率
  • 材料暂估可以跨年度吗
  • 所得税费用的计提
  • 出货一般要多久
  • 没有发票的房租如何入账
  • 企业捐赠灾区
  • 通货膨胀的含义及通货膨胀率的计算
  • 股权投资公司属于金融企业吗
  • 建筑公司核定征收是什么意思
  • 待报解预算收入付款怎么做账
  • 房地产开发企业土地增值税清算
  • 返利款进项税是否需要换算
  • 工商企业年金查询个人账户查询
  • 包工包料和包清工
  • 固定资产清理后卡片如何处理
  • 产业扶持资金管理办法
  • 开错的红字发票申请单上传了怎么撤销?
  • 发票跨月还能重开吗
  • 房产税和土地使用税计入什么科目
  • 出口退税可以不申报是否需要缴纳增值税
  • 合同签了发票开了钱没给怎么办
  • 去国税申请开票需要法人和财务去吗?
  • 开票信息没有电话号码可以吗
  • 进项税和销项税税率一样吗
  • 资本公积金转增股本
  • 原材料增值税怎么算
  • 工程物资建设期间盘盈盘亏
  • 公司注销还需要登报吗
  • 财政收据可以抵税吗
  • 供应商把价格算错了怎么办
  • 双软企业两免三减半企业所得税优惠政策
  • 发票认证平台登陆不了,IE不成功
  • 办理银行承兑汇票贴现的会计分录
  • 抽奖得奖
  • 营改增之前的建筑业税率是多少
  • 建筑劳务公司计提人工劳务费需要工资表吗?
  • 系统之家一键重装系统步骤
  • 笔记本默认网关不可用怎么修复
  • 应付账款周转天数越大说明什么
  • 在途物资退货会退款吗
  • php require include
  • 收回已确认的坏账准备
  • thinkphp操作数据库
  • 最常用的成本核算方法表
  • php 自动化测试
  • vue3中使用gis地图
  • html5 function
  • 收到利息收入计入什么科目
  • 2022最好用的港澳台电视直播
  • 网上报税流程演示2019
  • 耕地里埋坟国家有什么规定
  • 人工费按照考虑管理费和利润吗
  • 质量赔偿金 计入什么科目
  • 公司给员工的福利语句
  • 现金折扣什么时候冲减收入
  • c++operator详解
  • 财政总预算会计的特点
  • 增值税增量留抵退税计算
  • 管理费用主要包括
  • 安装sql2005提示sql server服务无法启动
  • 资产处置损益计入利润表哪个项目
  • 可以从公司公户直接支付给个人的款项有哪些
  • solaris挂载nfs
  • win7修改系统版本
  • windows8自动更新在哪里关闭
  • ubuntu搭建tftp服务器
  • 企业级路由器和普通路由器区别
  • win10打不出字解决办法
  • ubuntu chmod
  • [置顶]电影名字《收件人不详》
  • unity小技巧
  • perl cgi
  • shell脚本入门详解
  • 简单阐述javascript的主要作用
  • python怎么写爬虫
  • keycode输入cat
  • js中bom是什么意思
  • 国家税务总局使用
  • 江苏省地税局公众号关注
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设