react-router 里的 Link 标签和 a 标签有什么区别?
从最终渲染的 DOM 来看,这两者都是链接,都是 <a>
标签,区别是:
<Link>
是 react-router 里实现路由跳转的链接,一般配合 <Route>
使用,react-router 接管了其默认的链接跳转行为,区别于传统的页面跳转, <Link>
的“跳转”行为只会触发相匹配的 <Route>
对应的页面内容更新,而不会刷新整个页面。
而 <a>
标签就是普通的超链接了,用于从当前页面跳转到 href 指向的另一个页面(非锚点情况)
源码层面
先看 Link 点击事件 handleClick 部分源码
if (_this.props.onClick) _this.props.onClick(event); if (!event.defaultPrevented && // onClick prevented default event.button === 0 && // ignore everything but left clicks !_this.props.target && // let browser handle "target=_blank" etc. !isModifiedEvent(event) // ignore clicks with modifier keys ) { event.preventDefault(); var history = _this.context.router.history; var _this$props = _this.props, replace = _this$props.replace, to = _this$props.to; if (replace) { history.replace(to); } else { history.push(to); } }
Link 做了 3 件事情:
- 有 onclick 那就执行 onclick
- click 的时候阻止 a 标签默认事件(这样子点击
<a href="/abc">123</a>
就不会跳转和刷新页面) - 再取得跳转 href(即是 to),用 history(前端路由两种方式之一,history & hash)跳转,此时只是链接变了,并没有刷新页面
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论