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

  • 互联网做流量经验秘籍大分享!内含具体细节和做法(互联网做流量经理怎么样)

    互联网做流量经验秘籍大分享!内含具体细节和做法(互联网做流量经理怎么样)

  • 7p支持pd快充吗(7p支不支持pd快充)

    7p支持pd快充吗(7p支不支持pd快充)

  • 现在的手机第一次电池充电还有讲究吗(现在的手机第一次充电需要关机吗)

    现在的手机第一次电池充电还有讲究吗(现在的手机第一次充电需要关机吗)

  • 快手注销第三个条件不通过怎么办(快手注销第三项怎么通过)

    快手注销第三个条件不通过怎么办(快手注销第三项怎么通过)

  • 什么软件可以拼视频 (什么软件可以拼接图片)

    什么软件可以拼视频 (什么软件可以拼接图片)

  • 微信一进入就卡死怎么办(打开微信老是卡)

    微信一进入就卡死怎么办(打开微信老是卡)

  • 抖音直播点赞数怎么算的钱(抖音直播点赞数记录)

    抖音直播点赞数怎么算的钱(抖音直播点赞数记录)

  • 华为p40反向充电怎么设置(华为p40反向充电怎么关闭)

    华为p40反向充电怎么设置(华为p40反向充电怎么关闭)

  • 苹果无线鼠标滚动不了(苹果无线鼠标滚动)

    苹果无线鼠标滚动不了(苹果无线鼠标滚动)

  • 批注在哪个选项卡(批注是在哪个功能区)

    批注在哪个选项卡(批注是在哪个功能区)

  • 在外部设备中扫描仪属于什么设备(在外部设备中扫描仪属于输入设备吗)

    在外部设备中扫描仪属于什么设备(在外部设备中扫描仪属于输入设备吗)

  • 拔充电器就黑屏关机(充电器拔掉就黑屏)

    拔充电器就黑屏关机(充电器拔掉就黑屏)

  • oppo a9支持闪充吗(oppoa9手机能用闪充充电器吗?)

    oppo a9支持闪充吗(oppoa9手机能用闪充充电器吗?)

  • 微信语音看视频对面能听到吗(微信语音看视频没声音)

    微信语音看视频对面能听到吗(微信语音看视频没声音)

  • 小米双卡手机怎么设置用哪个卡上网(小米双卡手机怎么放卡图解)

    小米双卡手机怎么设置用哪个卡上网(小米双卡手机怎么放卡图解)

  • 编辑启动选项该输入什么(编辑启动选择怎么填)

    编辑启动选项该输入什么(编辑启动选择怎么填)

  • 手机为什么收不到短信(手机为什么收不到快递短信通知)

    手机为什么收不到短信(手机为什么收不到快递短信通知)

  • 苹果怎么下载在线视频(苹果怎么下载在看的视频)

    苹果怎么下载在线视频(苹果怎么下载在看的视频)

  • 电脑怎么扫描文件步骤(电脑怎么扫描文件图片)

    电脑怎么扫描文件步骤(电脑怎么扫描文件图片)

  • 华为nova5pro充电器型号(华为nova5pro充电速度)

    华为nova5pro充电器型号(华为nova5pro充电速度)

  • 苹果6为什么显示耳机模式(苹果6为什么显示sim卡无效?)

    苹果6为什么显示耳机模式(苹果6为什么显示sim卡无效?)

  • apple订阅在哪里看(iphone订阅在哪)

    apple订阅在哪里看(iphone订阅在哪)

  • 小度要一直插电源吗(小度一直插电会坏吗)

    小度要一直插电源吗(小度一直插电会坏吗)

  • 华为手机有云服务吗(华为手机有云服务器吗)

    华为手机有云服务吗(华为手机有云服务器吗)

  • .et文件怎么打开(uasset文件怎么打开)

    .et文件怎么打开(uasset文件怎么打开)

  • patch命令  给文件打补丁(.patch文件)

    patch命令 给文件打补丁(.patch文件)

  • 自然人电子税务局
  • 增值税期末留底退税政策解读
  • 软件产品即征即退备案资料
  • 实际负税计算公式
  • 报表中存货包括什么科目
  • 季节性临时工是不是可以不上社保
  • 研发设备可以一次性扣除吗
  • 加油充值卡发票能入账吗
  • 小规模纳税人是季报还是月报
  • 收到红字专票怎么做账务处理
  • 减半征收的印花税缴纳所得税吗
  • 收到服务费发票摘要怎么写
  • 应纳出口关税怎么算
  • 资本公积是啥
  • 公司新装宽带怎么做账?
  • 提前报废的固定资产怎么处理
  • 跨年冲销营业外支出
  • 企业个人补偿款需要缴税吗?
  • 5.0车船税和交强险一年多少钱
  • 网络信息化服务中心是干嘛的
  • 发票与报税记录不一致
  • 纳税申报方式怎么修改
  • 投资决策中常用的指标有
  • 公司账上的资金与注册资金不一致可以吗?
  • 不动产进项税额转出分录
  • 留抵税额怎么入账
  • 筹建期的餐饮费会计分录
  • 资本公积是什么会计要素
  • 事业单位政府预算
  • 金税盘技术维护费可以抵扣吗
  • php tars
  • 服务器时间总是不对
  • 坏账准备期末余额怎么计算
  • 分期摊销法计算公式
  • 农产品个体销售税率多少
  • 属于资本的是
  • 目前超频最高几ghz
  • 劳务派遣如何做绩效考核
  • php如何实现登录和注册
  • php运用的技术php开发有哪些实用的技术
  • phpmvc框架工作原理
  • vue 动态添加路由
  • elementui表格自定义排序
  • php给图片加水印
  • 三代手续费返还计入什么科目
  • 新增总产值
  • python2打包
  • 搅拌机属于什么费用
  • 企业存货的账务处理办法
  • 提高资产利用率的例子
  • 金蝶财务软件怎么冲销费用
  • 一般纳税人开具的普票可以抵扣吗
  • 代收代付的会计分录
  • 服务业增值税加计10%如何申报
  • 费用转销是什么意思
  • 公司库存现金如何存回银行
  • 总分类账的依据
  • 企业应该设置几个安全管理人员
  • sql外连接
  • mysql按字节截取
  • windows没有无线网络
  • win7右下角提示测试模式
  • windows环境是什么意思
  • 内存运行linux
  • 华硕电脑升级win11
  • 怎么手动安装xp系统
  • windows7键盘
  • win8系统找不到无线网络
  • win8 屏幕键盘
  • linux删错文件
  • information_schema翻译
  • linux内核怎么使用
  • surface使用
  • linux shell在while中用read从键盘输入的实现
  • Unity3D脚本对预制件无效
  • jquery 设置背景色
  • document.write与writeln的输出内容区别说明
  • 四川税务服务大厅
  • 云南地税局官网
  • 工会经费上缴地方工会15%的规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设