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

  • 荣耀手机隐私空间怎么打开(荣耀手机隐私空间怎样清理)

    荣耀手机隐私空间怎么打开(荣耀手机隐私空间怎样清理)

  • 荣耀30青春版是什么处理器(荣耀30青春版是30s吗)

    荣耀30青春版是什么处理器(荣耀30青春版是30s吗)

  • 惠州西门子与西门子有关系吗(惠州西门子和德国西门子)

    惠州西门子与西门子有关系吗(惠州西门子和德国西门子)

  • 虎牙直播写作业是什么意思(虎牙直播写作业是什么意思还跟你要微信语音聊天)

    虎牙直播写作业是什么意思(虎牙直播写作业是什么意思还跟你要微信语音聊天)

  • 微信群删了怎么恢复(微信群删了怎么恢复找回来)

    微信群删了怎么恢复(微信群删了怎么恢复找回来)

  • ip地址能查到具体地址吗(ip地址能查到具体门牌号吗)

    ip地址能查到具体地址吗(ip地址能查到具体门牌号吗)

  • 小米有投诉热线吗(小米投诉电话号码)

    小米有投诉热线吗(小米投诉电话号码)

  • rtu和dtu区别(rtu定义)

    rtu和dtu区别(rtu定义)

  • 抖音直播守护是什么意思(抖音直播 守护)

    抖音直播守护是什么意思(抖音直播 守护)

  • qq通知栏不显示消息怎么设置

    qq通知栏不显示消息怎么设置

  • 苹果8p手机信号时有时无(苹果8p手机信号弱怎么解决)

    苹果8p手机信号时有时无(苹果8p手机信号弱怎么解决)

  • 阿里巴钉钉是什么意思(阿里巴钉钉是什么软件啊)

    阿里巴钉钉是什么意思(阿里巴钉钉是什么软件啊)

  • a1691支持什么网络(a1691可以用联通吗)

    a1691支持什么网络(a1691可以用联通吗)

  • 抖音为什么会被限流(抖音为什么会被盗号)

    抖音为什么会被限流(抖音为什么会被盗号)

  • 小米无线鼠标怎么换电池(小米无线鼠标怎么充电)

    小米无线鼠标怎么换电池(小米无线鼠标怎么充电)

  • 华为手机怎么弄彩虹电量(华为手机怎么弄出来下边的三个键)

    华为手机怎么弄彩虹电量(华为手机怎么弄出来下边的三个键)

  • p30pro充电会自动断电吗(华为p30pro充电一会自动断开)

    p30pro充电会自动断电吗(华为p30pro充电一会自动断开)

  • 华为mate30什么时候出5G(华为mate30哪年出的)

    华为mate30什么时候出5G(华为mate30哪年出的)

  • 搜狗v模式怎么打开(搜狗v模式怎么开启)

    搜狗v模式怎么打开(搜狗v模式怎么开启)

  • vue背景音乐怎么设置(vue怎么添加音乐)

    vue背景音乐怎么设置(vue怎么添加音乐)

  • xsmax支持多少w快充(xs max支持多少w)

    xsmax支持多少w快充(xs max支持多少w)

  • 花椒直播如何保存回放(花椒直播如何保存到相册)

    花椒直播如何保存回放(花椒直播如何保存到相册)

  • 神舟战神K670D 笔记本Windows10系统改Windows7系统的安(神舟战神k670c-g4e1游戏笔记本怎么样?)

    神舟战神K670D 笔记本Windows10系统改Windows7系统的安(神舟战神k670c-g4e1游戏笔记本怎么样?)

  • 对标ChatGPT的开源中文方案(对标是啥)

    对标ChatGPT的开源中文方案(对标是啥)

  • 业务招待费的税金可以抵扣吗
  • 我国增值税征收范围
  • 金税四期什么时候执行
  • 没有认证怎么办
  • 加班餐费有发票怎么入账
  • 报销单与发票金额不符
  • 增值税一般纳税人证明文件
  • 应税劳务和应税服务不合理列支的有哪些
  • 小企业外币交易
  • 营改增后销售租赁后的设备如何做税务处理?
  • 基本户收到零余额转款怎么做分录
  • 员工借款可以直接转账吗
  • 商业银行固定资产贷款
  • 样机销售是什么意思
  • 纳税人为风险纳税人
  • 收购农产品销售会计分录怎么写
  • 企业股权转让有什么好处
  • 应交增值税出口退税科目怎么结平
  • 资本公积转增股本会计处理
  • 总分机构类型怎么选
  • 进口原材料的关税怎么算
  • 卖固定资产如何做账
  • 包工包料装修
  • 抵债资产会计核算办法
  • 事业单位打印费计入什么科目
  • 预提待摊费用怎么做账
  • 工程前期咨询收费标准
  • win7为什么无法开启aero
  • 无线电路问题
  • u盘重装系统电脑
  • php的file函数
  • 高德地图定位获取用户手机号码
  • php web3
  • 重装win7系统鼠标键盘没反应
  • php二维数组的遍历
  • 营业税的滞纳金如何计算
  • 公司转让固定资产要交税吗
  • uniapp编译原理
  • 达特穆尔动物园
  • 视觉slam ba
  • js怎么制作
  • word2vec使用方法
  • msg文件怎么创建
  • 赔偿客户款应该怎么记账
  • 一般纳税人补交印花税买卖合同
  • 帝国cms灵动标签下拉框
  • python numpy 删除元素
  • mongo聚合查询效率问题
  • 应收票据和其他应收款的区别
  • SQLServer2005与SQLServer2008数据库同步图文教程
  • 车间机器设备修理费用计入什么科目
  • 超市的小票能入账吗
  • 计提递延所得税资产影响当期利润吗
  • 研发支出资本化支出在资产负债表哪里体现
  • 怎样暂估成本的会计分录
  • 去年的成本做少了咋办
  • 商业会计和工业会计哪个好
  • mysql怎么备份数据库命令
  • supervisor.sock refused connection
  • 创建一个windows
  • CentOS安装配置adb环境
  • freebsd版本选择
  • webinstall.exe - webinstall是什么进程
  • mstore.exe - mstore是什么进程 有什么用
  • 测试模式win8专业版 9200
  • windows7屏幕颠倒
  • iptables: Unknown error 4294967295问题解决方法
  • android_zh
  • js获取指定元素
  • bootstrap tree table
  • nodejs mocha
  • node.js详解
  • javascript如何
  • javascript Keycode对照表
  • python 脚本
  • python中的变量和常量ppt
  • android从入门到精通
  • 税收分类分级管理后如何开展风险管理
  • 转让专利权取得的所得属于财产转让所得吗
  • 业务招待费进项可以抵扣吗为什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设