react-router中Link标签和a标签有什么区别
作者:剑九 六千里
1.功能:
- Link:在单页应用程序(SPA)中提供导航,而不会导致页面重新加载。当用户点击链接时,React会阻止浏览器默认的页面刷新行为,并且使用
react-router
提供的导航方式,只更新URL
并渲染对应的组件,从而实现单页面应用(SPA)的效果。。 - a:单击时会导致完整页面重新加载,导航到新
URL
。
2.性能:
- Link:由于不会导致页面重新加载,因此它提供更好的用户体验,特别是在
SPA
中。它提高了性能,因为避免了不必要的网络请求。 - a:完整页面重新加载会导致较慢的用户体验,因为需要从服务器获取新页面。
3.无障碍:
- Link:提供更好的无障碍性,因为它可以通过键盘聚焦和激活。
- a:可能不那么无障碍,因为它不提供与按钮或其他交互式元素相同的键盘导航和焦点行为。
使用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使用示例:
import { BrowserRouter as Router, Route, Link } from 'react-router-dom'; const Home = () => <h2>Home</h2>; const About = () => <h2>About</h2>; const App = () => ( <Router> <div> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about/">About</Link> </li> </ul> </nav> <Route path="/" exact component={Home} /> <Route path="/about/" component={About} /> </div> </Router> ); export default App;
区别
<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)跳转,此时只是链接变了,并没有刷新页面
到此这篇关于react-router中Link标签和a标签有什么区别的文章就介绍到这了,更多相关react-router Link标签和a标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!