第 85 题:react-router 里的 <Link> 标签和 <a> 标签有什么区别
如何禁掉 <a>
标签默认事件,禁掉之后如何实现跳转。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 第 86 题:算法题之「两数之和」
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何禁掉 <a>
标签默认事件,禁掉之后如何实现跳转。
上一篇: 第 86 题:算法题之「两数之和」
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(10)
<Link>
标签是react-router-dom
下的元素,<a>
是html原生标签<Link>
会页面无刷新的跳转,而<a>
标签进行刷新<a>
标签在涉及到path变化后浏览器的原生反应就是会刷新页面,虽然<Link>
渲染后默认也是a标签,在<Link>
内部的实现原理是通过history
进行了跳转,并且event.preventDefault()
阻止了a
标签的默认事件你说的对,这才是最大的区别
之前遇到过一个bug, 在一个SPA里点击一个链接按钮后,redux里的数据都丢了。后来才发现,不知道谁写了一个a,没有用Link。相当于重新打开了一个SPA。
history 跟 hash 模式混为一谈了吧...
link会根据HASH的形态不同自动调整
<a href="javascript: void 0" @click="$router.push(route)">
Link 的本质也是a 标签。只不过在Link 中禁用了 a 标签的默认事件,改用了history对象提供的方法进行跳转。
先看Link点击事件handleClick部分源码
Link做了3件事情:
<a href="/abc">123</a>
就不会跳转和刷新页面)从最终渲染的 DOM 来看,这两者都是链接,都是
<a>
标签,区别是:<Link>
是 react-router 里实现路由跳转的链接,一般配合<Route>
使用,react-router 接管了其默认的链接跳转行为,区别于传统的页面跳转,<Link>
的“跳转”行为只会触发相匹配的<Route>
对应的页面内容更新,而不会刷新整个页面。而
<a>
标签就是普通的超链接了,用于从当前页面跳转到 href 指向的另一个页面(非锚点情况)。