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

  • 好看的火星文网名(好看的火星文符号)(好看的火星文网名男绝情狼)

    好看的火星文网名(好看的火星文符号)(好看的火星文网名男绝情狼)

  • 苹果手机铃声怎么设置自己的歌(苹果手机铃声怎么由弱到强)

    苹果手机铃声怎么设置自己的歌(苹果手机铃声怎么由弱到强)

  • iphone6屏幕一直亮怎么办(苹果6p屏幕一直转圈怎么回事)

    iphone6屏幕一直亮怎么办(苹果6p屏幕一直转圈怎么回事)

  • 联通停用2g 老人手机怎么办(联通停用2g要强制升级保底)

    联通停用2g 老人手机怎么办(联通停用2g要强制升级保底)

  • ns接电视为什么没信号(ns连接电视不稳定)

    ns接电视为什么没信号(ns连接电视不稳定)

  • 利用光学原理存储数据的是(利用光学原理存储数据的是A内存储器B光盘C硬盘D软盘)

    利用光学原理存储数据的是(利用光学原理存储数据的是A内存储器B光盘C硬盘D软盘)

  • 华为mate20上市时间(华为mate20价格)

    华为mate20上市时间(华为mate20价格)

  • 快手连麦受限制多久恢复(快手连麦是不是有限制)

    快手连麦受限制多久恢复(快手连麦是不是有限制)

  • 手机第一次用要把电用完吗(手机第一次用要充多少小时的电)

    手机第一次用要把电用完吗(手机第一次用要充多少小时的电)

  • ipad画画的软件叫什么(适合ipad画画的软件)

    ipad画画的软件叫什么(适合ipad画画的软件)

  • itunes是什么意思在手机里(iTunes是什么意思?)

    itunes是什么意思在手机里(iTunes是什么意思?)

  • 三星s9g9650参数(三星s9g9600)

    三星s9g9650参数(三星s9g9600)

  • 微型计算机内存容量的大小一般是指什么而言(微型计算机内存储器通常采用)

    微型计算机内存容量的大小一般是指什么而言(微型计算机内存储器通常采用)

  • 美篇标题去掉昵称(美篇标题去掉昵称可以吗)

    美篇标题去掉昵称(美篇标题去掉昵称可以吗)

  • pentium2是指什么(pentium ll)

    pentium2是指什么(pentium ll)

  • 华为手机标准进程是几个(华为手机进入)

    华为手机标准进程是几个(华为手机进入)

  • 拼多多许愿瓶怎么出来(拼多多心愿礼盒)

    拼多多许愿瓶怎么出来(拼多多心愿礼盒)

  • 华为nova5和p30对比(nove5和p30)

    华为nova5和p30对比(nove5和p30)

  • 微信辅助扫码是什么(微信辅助扫码是干什么的)

    微信辅助扫码是什么(微信辅助扫码是干什么的)

  • 手机安装软件总是失败(手机安装软件总是重启怎么办)

    手机安装软件总是失败(手机安装软件总是重启怎么办)

  • 如何解决Win10wsappx内存占用过高(如何解决win10关机后usb还在供电)

    如何解决Win10wsappx内存占用过高(如何解决win10关机后usb还在供电)

  • pcclient.exe是什么进程 pcclient进程查询(pc应用是什么意思)

    pcclient.exe是什么进程 pcclient进程查询(pc应用是什么意思)

  • discuz教程:电脑版、手机版去除标题title中的Powered by Discuz(discuz怎么使用)

    discuz教程:电脑版、手机版去除标题title中的Powered by Discuz(discuz怎么使用)

  • 税务师继续教育怎么做
  • 如何成为一般纳税人的条件
  • 已经抵扣的进项税额转出怎么申报
  • 固定资产累计折旧会计科目
  • 合伙企业分配利润如何纳税
  • 税款已缴未入库是怎么回事
  • 政府补贴的递延收益
  • 价外补贴需要交增值税吗
  • 合伙企业注销流程图
  • 成品油发票如何同步
  • 其他货币资金贷方是增加还是减少
  • 工程领用物资退回会计分录怎么写?
  • 用友软件冲销凭证是什么意思
  • 去年支付的费用今年取得发票
  • 公司多久不做账会被注销?
  • 境外所得纳税
  • 公司开设食堂需要哪些手续
  • 社保申报怎么查询
  • 制造企业享受增值税政策
  • 去年的进项票今年可以抵吗
  • win10 100g不够
  • tplink路由器手机怎么设置
  • 路由器怎么重置网络
  • windows7iis安装
  • 收不回的心
  • 公司之间可以借款吗怎么做账
  • 细说linux
  • 公司员工私车公用协议要签吗
  • 鸿蒙系统怎么去掉负一屏
  • mac上读取ntfs
  • 增值税价外费用怎么算
  • php自定义函数的语法格式
  • 发生的广告费用属于什么会计要素
  • php代码扫描
  • 债券利息计算方法
  • react-use
  • 合同权益转让 范本
  • 工会经费申报表填写说明
  • python雪花算法生成id
  • php使用while循环计算1到100的和
  • php函数传值的引用是什么
  • 反向选择命令
  • 小微企业普惠性税收减免政策2022
  • 端午节发现金怎么说
  • python3 argparse
  • 增值税一般纳税人可以开普票吗
  • 暂估入库成本处理
  • 送货单收据怎么写
  • sql server 视图排序
  • 发票先认证后入账怎么做账
  • 暂估成本发票来了怎么做分录
  • 行政单位应缴财政税金
  • 预算单位授权支付专户的特征
  • 慰问金计入什么部门经济分类
  • 一次性伤残就业补助金有时间限制吗
  • 企业差旅费的报销流程
  • 残疾人就业保障金上年职工工资总额
  • 会议费是指参加会议还是举办会议
  • 长期股权投资属于什么会计要素
  • mysql触发器使用
  • ubuntu系统中安装微信步骤
  • Win7 64位旗舰版中让SSD固态硬盘更快的优化方法
  • win10玩cf几分钟无响应
  • Linux系统配置IP地址
  • linux给文件赋全部权限
  • cocos2d怎么用
  • 批处理执行bat文件
  • nodejs跳转到指定页面
  • 深入理解中国式现代化论文
  • android应用开发基础
  • node的express
  • jquery拖拽插件
  • javascript基础
  • java教程
  • 怎样纳税申报和缴纳
  • 风险研判能力不足的原因
  • 国家税务总局河北地税局
  • 安徽省历任书记
  • 烟叶进口关税
  • 吉林省职称查询入口
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设