在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
相关产品推荐
相关产品推荐

