react-router 里的 Link 标签和 a 标签有什么区别?

2023-10-26

相同点


从最终渲染的 DOM 来看,这两者都是链接,都是 <a> 标签。

区别


        <Link> 是 react-router 里实现路由跳转的链接,一般配合 <Route> 使用,react-router 会接管Link 的默认链接跳转行为,区别于传统的页面跳转,<Link> 的“跳转”行为只会触发相匹配的 <Route> 对应的页面内容更新,而不会刷新整个页面。
而 <a> 标签就是普通的超链接了,用于从当前页面跳转到 href 指向的另一个页面(非锚点情况)。

        对比<a>,Link组件避免了不必要的重渲染,react-router只更新变化的部分从而减少DOM性能消耗,react的创新之处在于,它利用虚拟DOM的概念和diff算法实现了对页面的"按需更新",react-router很好地继承了这一点

Link做了3件事情:

1、如果Link上定义了onClick方法,则执行该onclick方法
2、click的时候阻止a标签默认事件(这样子点击<a href="/abc">123</a>就不会跳转和刷新页面)
3、再取得跳转href(即是to),用history(前端路由两种方式之一,history & hash)跳转,此时只是链接变了,并没有刷新页面

使用Link标签

属性描述


to
跳转链接的路径,如 /users/123。

query
已经转化成字符串的键值对的对象。

hash
URL 的 hash 值,如 #a-hash。

注意:React Router 目前还不能管理滚动条的位置,并且不会自动滚动到 hash 对应的元素上。如果需要管理滚动条位置,可以使用 scroll-behavior 这个库。

state
保存在 location 中的 state。

activeClassName
当某个 route 是激活状态时,<Link> 可以接收传入的 className。失活状态下是默认的 class。

activeStyle
当某个 route 是激活状态时,可以将样式添加到链接元素上。

onClick(e)
自定义点击事件的处理方法。如处理 <a> 标签一样 - 调用 e.preventDefault() 来防止过度的点击,同时 e.stopPropagation() 可以阻止冒泡的事件。

其他
你也可以在标签上传入一些你想要的 props,如 title,id,className 等等。


示例

<Link to={`/users/${user.id}`} activeClassName="active">{user.name}</Link>
// 变成它们其中一个依赖在 History 上,当这个 route 是
// 激活状态的
<a href="/users/123" class="active">Michael</a>
<a href="#/users/123">Michael</a>

// 修改 activeClassName
<Link to={`/users/${user.id}`} activeClassName="current">{user.name}</Link>

// 当链接激活时,修改它的样式
<Link to="/users" style={{color: 'white'}} activeStyle={{color: 'red'}}>Users</Link>


// 字符串定位描述符 String location descriptor.
<Link to="/hello">
 Hello
</Link>

// 对象定位描述符 Object location descriptor.
<Link to={{ pathname: '/hello', query: { name: 'abc' } }}>
 Hello
</Link>

// 函数返回定位描述符Function returning location descriptor.
<Link to={location => ({ ...location, query: { name: 'abc' } })}>
 Hello
</Link>


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react-router 里的 Link 标签和 a 标签有什么区别? 的相关文章

  • 弹出窗口,如何在IE8中隐藏地址栏

    当我打开弹出窗口并设置 location 0 或 location no 时 网址栏仍显示在 IE8 中且为只读 怎么能隐藏呢 Thanks 这是不可能的 现代浏览器不允许这样做 这将是一个主要的安全缺陷 也可以看看这个答案 无耻地抄袭了大
  • 使用 javascript 下载时 PDF 为空

    我有一个 Web 服务 可以在其响应中返回 PDF 文件内容 当用户单击链接时 我想将其下载为 pdf 文件 我在UI中编写的javascript代码如下 http get http MyPdfFileAPIstreamURl then f
  • document.body.style.marginTop 在 JS 中返回空白字符串

    据我了解 some elem style maginTop 将返回带有元素上边距的字符串 相反 我总是得到一个空字符串 我想在 body 上使用它 但我也尝试在 div 上使用 但这也不起作用 console log document bo
  • 为什么复制 eval 会改变它的行为?

    根据rollupjs 文档 https rollupjs org guide en eval2 eval 简单地 复制 eval 为您提供了一个执行完全相同操作的函数 但该函数在全局范围而不是本地范围内运行 var eval2 eval f
  • Google 地图 API - 添加多个目的地不起作用(谷歌方向)

    我在创建 复制谷歌地图方向功能时遇到问题 当我有 从 到 字段时 我可以让它正常工作 但一旦我尝试添加多个目的地 它就不起作用 我看过我们 但我没有得到任何很好的示例教程来展示这是如何完成的 以下是我到目前为止所做的事情 但我很确定这件事做
  • D3:打字机风格的文本过渡

    In this jsfiddle http jsfiddle net VividD QbysN 标签通过减小旧文本的字体 然后增加新文本的字体 从一个文本过渡到另一个文本 但是 我希望新文本以 打字机 方式出现 就像这样jsfiddle h
  • 如何简洁地赋值并立即调用函数变量?

    以下是在闭包中定义匿名函数 调用该函数并忽略它的方法 function do stuff 这用于维持有限的范围而不向脚本添加大量内容 IIFE 立即调用函数表达式 如果您希望立即执行某个函数 同时仍保留该函数以供将来使用 该怎么办 如下所示
  • 如何传递具有动态参考 angular2 的元素?

    我里面有元素ngFor环形 每个元素都像这样得到引用 f floor b 如你所见floor是一个变量 我想将这些元素传递给函数 代码
  • 因为它违反了以下内容安全策略指令:“style-src 'self'”

    我有一个带有此标题的网页 这是一个非交互式页面 只有 twitter bootstrap js
  • 输入:页面加载时应用了无效的 css 规则

    在 Firefox 或 Chrome 中查看这两个 fiddle 在this http jsfiddle net hezgkxoh 2 一 我只有一个简单的表格required属性和一个submit按钮 当框为空时按 提交 会导致其样式为i
  • 在 JavaScript 中查找文本字符串

    我有一个很大的有效 JavaScript 文件 utf 8 我需要从中自动提取所有文本字符串 为简单起见 该文件不包含任何注释块 仅包含有效的 ES6 JavaScript 代码 一旦我发现发生 or 或 我应该扫描文本块的末尾 这是我陷入
  • TypeError:expect(...).to.startsWith 不是一个函数 - chai 和 chakram

    我开始编写一些自动化测试 API 现在我尝试对此端点执行以下操作 https dog ceo api breeds image random https dog ceo api breeds image random 所以我添加到我的函数中
  • Extjs 5,数据模型关联和加载嵌套数据

    试图让这项工作 我想在两个对象模型上加载嵌套数据 Ext application name MyApp launch function Ext define MyApp model Address extend Ext data Model
  • Google Maps API 多边形文物在缩放上显示

    我有一个使用 JS API 构建的 Google 地图 其中包含英国不同地区的多边形 在 Chrome 已测试 v58 和 v60 上 当用户使用滚轮放大或缩小时 多边形的随机伪像会卡在地图上 进一步缩放可以消除它们或显示不同的伪影 在 F
  • 使用 require 与 fs.readFile 读取 json 文件内容

    假设对于来自 API 的每个响应 我需要将响应中的值映射到 Web 应用程序中的现有 json 文件 并显示 json 中的值 在这种情况下 读取 json 文件的更好方法是什么 require 或 fs readfile 请注意 可能有数
  • 如何在react redux中实现一个自包含组件?

    我正在基于react redux构建一个文件管理器webui 我的目的是通过这个项目掌握react和redux 如您所知 文件管理器需要一个树浏览器 我想构建一个可以包含它自己并且每个都有自己状态的组件 像下面这样 TreeNode可以包含
  • 在三角形内强制图表 d3.js

    我正在研究 d3 js 力图 我有一个问题 是否可以在具有某些坐标的三角形内制作力图 这是我的代码 var width 500 var height 500 margin var marginLeft 10 var marginTop 10
  • 从 JSON 模式动态创建表单 [Angular 8]

    我正在努力从 Angular 8 中的 JSON Schema 创建动态表单 我找到了一些库 但是一个很旧 https github com dschnelldavis angular2 json schema form 上次提交约 2 年
  • 编辑评论框脚本为动态

    为了将 facebook 插件评论框的脚本编辑为动态并分别显示与每个帖子相关的评论 我在脚本中添加了这两行代码 var related document getElementById fb related related setAttrib
  • 在不兼容的接收器上调用方法 Set.prototype.add 未定义

    我根本不明白为什么它会给出这个错误 这是我在 chrome 控制台上测试的结果 gt var mySet lt undefined gt mySet new Set lt Set gt mySet add foo bar baz Worke

随机推荐

  • HTTPS科普扫盲帖

    为什么需要https HTTP是明文传输的 也就意味着 介于发送端 接收端中间的任意节点都可以知道你们传输的内容是什么 这些节点可能是路由器 代理等 举个最常见的例子 用户登陆 用户输入账号 密码 采用HTTP的话 只要在代理服务器上做点手
  • Oracle创建用户、角色、授权、建表

    https www cnblogs com roger112 p 7685307 html oracle数据库的权限系统分为系统权限与对象权限 系统权限 database system privilege 可以让用户执行特定的命令集 例如
  • 学习自动化测试该怎么学?6个步骤轻松拿捏

    自动化测试作为脱离手工测试的基本核心内容 其重要性不言而喻了 而且我们来看近期大厂的一些招聘信息显示 基本上自动化测试是必备前提 没有这个基本就不用谈后面的问题了 下面我们通过联想集团的一个软件测试工程师的要求来聊一下具体要怎么学才能掌握这
  • 在stm32上对于火焰模块的应用分析

    在stm32上对于火焰模块的应用分析 一 火焰模块 接线说明 供电 3 3v G 接地 GND AO模拟输入 DO数字输出 以stm32f407举例说明 AO接入 PF7 DO接入 PA4 实际上也可以不接 因为本实例没用到 二 火焰模块的
  • 【matlab】norm的用方法

    matlab norm的用方法 从上面可以得到 对一个向量P 5 0 1 norm 就等于各项的平方和再开根号
  • JAVA和C++的几个主要不同点

    1 指针 JAVA语言让编程者无法找到指针来直接访问内存无指针 并且增添了自动的内存治理功能 从而有效地防止了c c 语言中指针操作失误 如野指针所造成的系统崩溃 但也不是说JAVA没有指针 虚拟机内部还是使用了指针 只是外人不得使用而已
  • 100天精通Python(数据分析篇)——第69天:Pandas常用数据筛选方法(between、isin、loc、iloc)

    文章目录 一 布尔索引 二 between 三 isin 1 单列筛选 2 多列筛选 3 通过字典的形式传递多个条件 4 删除异常值所在行 5 isnotin实现 四 loc iloc 重要 0 创建DataFrame 1 提取行数据 2
  • Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)

    1 简介 JMeter配置元件可以用来初始化默认值和变量 读取文件数据 设置公共请求参数 赋予变量值等 以便后续采样器使用 将在其作用域的初始化阶段处理 配置元件 Config Element 提供对静态数据配置的支持 可以为取样器设置默认
  • Flutter之基本路由,命名路由跳转,返回上一页,替换路由和返回根路由——Flutter基础系列

    需求 今天为大家介绍一下Flutter是如何进行页面跳转 路由管理的 一 基本路由 1 基本路由使用 假设我们需要从A页面跳转到basic页面 则我们需要在A页面引入 import basic dart 然后在A页面通过以下方法跳转 Rai
  • C/C++指向二维数组的指针

    1 二维数组 设有整型二维数组a 3 4 如下 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为 int a 3 4 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000 各下标变量的首地址及其值如图
  • Spring 全家通之 SpringMVC 如何传递参数以及返回值的类型

    大家好 我是你们的老朋友 Java 学术趴 最近小编又在整了 Spring 全家桶笔记 笔记会每天定时的进行发放 喜欢的大佬们欢迎收藏点赞关注呦 小编会每天分享的呦 今天给大家带来新的框架技术 SpringMVC Spring MVC 属于
  • 带你全面了解自动化测试框架—从理论到工具

    软件行业正迈向自主 快速 高效的未来 为了跟上这个高速前进的生态系统的步伐 必须加快应用程序的交付时间 但不能以牺牲质量为代价 快速实现质量是必要的 因此质量保证得到了很多关注 为了满足卓越的质量和更快的上市时间的需求 自动化测试将被优先考
  • 这张磁盘有写保护_win10 移动硬盘或U盘清除“被写保护”

    Win10系统取消移动硬盘写保护的方法 呃 这是别人写得不错的文章 我转载一下 发布时间 2016 12 20 发布者 win7之家 慧歌 浏览数 1089 移动硬盘是我们经常会用到的一个存储设备 在使用过程中难免会碰到一些情况 就有用户升
  • 【置顶】Flutter系列、Python系列目录

    Flutter系列 Flutter 1 1 8个Flutter的优势以及为什么要在下一个项目中尝试Flutter Flutter安装与运行 Flutter1 2 在 Windows 10下配置Flutter开发环境 Flutter1 3 在
  • 读书笔记 摘自:《分享经济的爆发》

    读书笔记 摘自 分享经济的爆发 作者 印 阿鲁 萨丹拉彻 赞 誉 创新的实验性与监管的连续性本身存在矛盾 监管者通常需要通过更新现有法律体系使其与创新性服务相适应 否则就会阻碍创新 将分享经济看作市场经济和礼物经济的 过渡态 资本主义和社会
  • 20171010离线赛总结

    题解 第一题 字符连通块 这道题还是比较好想的 首先把每个连通块标记出来 并用第一次扫到的点标记为这个连通块的父节点 接下来要做的就是把一个 周围的连通块连通起来 不过要注意一点 在连通标记的时候不要用memset memset的复杂度是m
  • Windows端CUDA11.3+CUDNN+pytorch环境搭建

    1 显卡驱动的安装 最近 在学习pytorch深度学习 遇到很多的坑 环境配置也出现过问题 忍不住和大家进行分享 现在把环境搭建过程分享给大家 1 1 查看自己的显卡 具体操作 我的电脑 属性 设备管理器 显示适配器 1 2 驱动的下载 安
  • (c语言实现)算法笔记之bfs及pta习题

    目录 一 bfs 广度优先搜索 的定义 二 bfs 广度优先搜索 的应用 三 题型训练 1 奇怪的电梯 2 寻宝 3 龙舌兰酒吧 四 总结 一 bfs 广度优先搜索 的定义 BFS 全称是 Breadth First Search 中文名是
  • 基于XMPP协议的Android即时通信系

    以前做过一个基于XMPP协议的聊天社交软件 总结了一下 发出来 设计基于开源的XMPP即时通信协议 采用C S体系结构 通过GPRS无线网络用TCP协议连接到服务器 以架设开源的Openfn e服务器作为即时通讯平台 系统主要由以下部分组成
  • react-router 里的 Link 标签和 a 标签有什么区别?

    相同点 从最终渲染的 DOM 来看 这两者都是链接 都是 a 标签 区别 是 react router 里实现路由跳转的链接 一般配合 a