位置: 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模型进行实体抽取(猿创部落是干什么的)

  • 黑莓q10小红书(q10 黑莓)(黑莓q10-1版本)

    黑莓q10小红书(q10 黑莓)(黑莓q10-1版本)

  • 小米8se屏幕为什么贵(小米8se有时候看屏幕会感到突然一闪是什么原因)

    小米8se屏幕为什么贵(小米8se有时候看屏幕会感到突然一闪是什么原因)

  • 携号转网余额怎么办(携号转网余额怎么退)

    携号转网余额怎么办(携号转网余额怎么退)

  • 低功耗广域网络具有什么特点(低功耗广域网络产业联盟)

    低功耗广域网络具有什么特点(低功耗广域网络产业联盟)

  • 拼多多拼主和拼员有什么区别(拼多多拼主和拼员花钱一样多吗)

    拼多多拼主和拼员有什么区别(拼多多拼主和拼员花钱一样多吗)

  • 隐藏会话是什么意思(隐藏会话有提示吗)

    隐藏会话是什么意思(隐藏会话有提示吗)

  • 拼多多拉黑了对方能下单吗(拼多多拉黑了对方能评价吗)

    拼多多拉黑了对方能下单吗(拼多多拉黑了对方能评价吗)

  • 八位的二进制数+0110101的补码是(八位的二进制数10010110的补码为)

    八位的二进制数+0110101的补码是(八位的二进制数10010110的补码为)

  • 微信照片原图几天过期(微信相册原图)

    微信照片原图几天过期(微信相册原图)

  • 唯品会怎么用花呗支付(唯品会怎么花呗付款方式)

    唯品会怎么用花呗支付(唯品会怎么花呗付款方式)

  • 苹果xr带无线充电功能吗(苹果xr无线充电多少瓦)

    苹果xr带无线充电功能吗(苹果xr无线充电多少瓦)

  • 手机上如何恢复qq好友(手机上如何恢复删去的QQ好友)

    手机上如何恢复qq好友(手机上如何恢复删去的QQ好友)

  • 小米全屏手机返回键在哪(小米手机怎么把全面屏手机的返回键调整位置)

    小米全屏手机返回键在哪(小米手机怎么把全面屏手机的返回键调整位置)

  • 建网站需要什么(建网站需要什么服务器)

    建网站需要什么(建网站需要什么服务器)

  • u盘为什么会变raw(u盘变成乱码,修复后空了)

    u盘为什么会变raw(u盘变成乱码,修复后空了)

  • 微信收款码限额怎么办(微信收款码限额度吗)

    微信收款码限额怎么办(微信收款码限额度吗)

  • 腾讯视频绑定手机号怎么解除(腾讯视频绑定手机)

    腾讯视频绑定手机号怎么解除(腾讯视频绑定手机)

  • 如何修改Win10系统注册表,防止意外升级到微软Win11(如何修改win10系统电脑密码)

    如何修改Win10系统注册表,防止意外升级到微软Win11(如何修改win10系统电脑密码)

  • 关于嵌套使用 iFrame 出现 Refused to display in aframe 拒绝连接访问 和 ‘X-Frame-Options‘ to ‘SAMEORIGIN‘ 的解决方案【已解决】(嵌套if怎么用)

    关于嵌套使用 iFrame 出现 Refused to display in aframe 拒绝连接访问 和 ‘X-Frame-Options‘ to ‘SAMEORIGIN‘ 的解决方案【已解决】(嵌套if怎么用)

  • 学习CSS3,模拟春雪漫天飘的动画效果(css3的模块结构和应用)

    学习CSS3,模拟春雪漫天飘的动画效果(css3的模块结构和应用)

  • 企业筹建期间利息支出税前扣除怎么算
  • 管理费用贷方有哪些递减
  • 村集体土地出租公示
  • 结算金额和付款金额
  • 企业管理费可以扣除吗
  • 缓缴税款到期缴纳填主表第几行
  • 收到微信公众号退款怎么做账
  • 应征进口关税的公式
  • 营改增的税收政策
  • 纳税人涉税信息查询
  • 个人所得税生产经营所得投资者减除费用
  • 什么企业不可以开通信保订单服务
  • 办理对公账户手续流程
  • 培训费用走账需要交税吗
  • 增值税专用发票怎么开
  • 非税收入的发票能抵扣吗
  • 个人所得税人员添加后如何操作
  • 简述国内采购流程
  • 结算银行贷款利息用什么凭证
  • 总资产报酬率怎么查
  • win10预安装环境
  • 债券利息收入征税吗
  • 家庭版系统如何重装成专业版本
  • 微软windows11正式版下载
  • 法恩达尔的信
  • 长期应收款属于流动资产吗
  • DeepLabV3+:Mobilenetv2的改进以及浅层特征和深层特征的融合
  • php网站配置
  • 房地产开发企业销售自行开发的房地产项目
  • 支付产品运输费怎么入账
  • php正则表达式匹配字符串
  • php中exec
  • 结存材料实际成本分录
  • php限制
  • thinkphp制作404跳转页的简单实现方法
  • dhcp命令行
  • java删除类
  • 怎样根据税负率计算税额
  • 税控服务费减免会计分录
  • 物流辅助服务属于什么科目
  • 配件及修理费
  • 在Windows平台上不属于命令ar-d的作用是
  • 公司注销未分配利润如何处理
  • 银行本票与银行汇票的区别之一是
  • 不征税收入与免税收入的区别是什么
  • 事业单位小规模纳税人增值税账务处理
  • 个体工商户开具房屋租赁发票
  • 以前年度社保计提出错了怎么调整
  • 什么情况下说免贵
  • 基本建设费用的组成
  • 出租写字楼写字楼
  • 会计工作移交的时候需要有谁在场
  • 什么是权益性投资企业
  • 扩展什么
  • 自动软件脚本
  • mysql 创建root用户和普通用户及修改删除功能
  • windows找不到文件请确定文件名是否正确
  • windows server 2016最大内存
  • 深入Windows 第七版 第二部分
  • nvm是啥
  • windows7开机
  • window7主题变成xp了
  • linux命名命令
  • 建行网银盾在中国银行可以用吗
  • win7系统文件夹怎么加密
  • win10教育版登录
  • cocos2d环境配置
  • jquery对动态生成的进行操作
  • node.js cookie-parser之parser.js
  • [置顶]游戏名 TentacleLocker
  • javascript的
  • js传参数有长度限制
  • unity网格地形
  • app开发指南
  • jquery attribute
  • javascript面向对象编程指南第三版
  • 国家税务局发票验证查询系统
  • 国家税务总局介绍
  • 财政云操作视频
  • 车辆购置税计入固定资产一起折旧吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设