You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MUI中使用<NextLink/>与带href的<Button/>的差异及NextLink作用咨询

MUI两种返回按钮实现的差异&NextLink作用说明

两种写法的实际差异

先看两段实现代码:

原有嵌套写法

<NextLink
  href="/settings"
  passHref
>
  <Button
    component="a"
    startIcon={<ArrowBackIcon fontSize="small" />}
  >
    Voltar
  </Button>
</NextLink>

简化后的直接写法

<Button
  href="/settings"
  passHref
  component="a"
  startIcon={<ArrowBackIcon fontSize="small" />}
>
  Voltar
</Button>

这两种写法基础跳转功能上没有显著差异,点击按钮都能跳转到/settings页面,但底层逻辑完全不同:

  • 简化写法:因为给Button设置了component="a",本质是渲染成原生<a>标签,跳转依赖浏览器默认的全页面刷新机制,完全没用到Next.js的客户端路由能力。
  • 嵌套NextLink的写法:NextLink是Next.js专属的客户端路由组件,它会拦截原生a标签的默认跳转行为,实现无刷新导航——跳转时不会重新加载整个页面,只更新需要变化的内容;同时还支持预加载(链接进入视口时自动提前加载目标页面资源,提升跳转速度)、传递路由状态等Next.js专属的路由功能。这里的passHref是为了让NextLink把href属性传递给内部的MUI Button组件(因为Button是自定义组件,不是原生a标签,需要该属性完成href的传递)。

NextLink的核心作用

NextLink的核心价值是为Next.js项目提供路由体验优化:

  • 无刷新导航:跳转过程中页面不会白屏,用户体验更流畅;
  • 预加载提速:提前加载目标页面资源,用户点击链接时几乎瞬间完成跳转;
  • 路由状态传递:可以通过state属性向目标页面传递数据,在目标页面用useRouter即可获取;
  • 适配Next.js路由规则:完美兼容动态路由、嵌套路由等Next.js路由体系,配合框架实现更复杂的路由逻辑。

总结

如果你的项目基于Next.js,想要利用客户端路由的优势(无刷新、快),那嵌套NextLink的写法才是正确选择;要是只需要基础跳转功能,不在乎页面刷新,简化写法也能实现需求,但本质就是原生a标签的跳转行为。

内容的提问来源于stack exchange,提问作者Eduardo Pontes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:00:24