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

发布于 2023-08-06 14:47:32 字数 1286 浏览 40 评论 0

从最终渲染的 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 件事情:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文