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

Next.js自定义Link组件代码含义及NextLink作用相关疑问

代码逐段拆解说明

你看到的导入写法和你之前学的基础用法没有本质区别,只是做了重命名适配自定义封装的需求:

  • NextLink就是你平时直接从next/link导入的官方原生Link组件,这里特意改导入名是为了和后面自己封装的同名Link组件区分开,避免命名冲突
  • LinkProps as NextLinkProps是导入官方Link组件的TypeScript类型定义,同样通过as关键字重命名,用来给后面的自定义组件做类型校验。

这段自定义Link封装的作用

你之前学到的「直接导入Link就能用」是Next.js 13+版本App Router的新特性,而你贴的这段代码是Next.js 12及更早版本(或者兼容老写法的Pages Router项目)里非常常见的通用封装:
老版本的官方NextLink组件本身只负责路由跳转逻辑,有两个使用限制:

  1. 组件内部必须手动嵌套一层原生<a>标签才能正常渲染链接
  2. 官方NextLink不会透传className、style、原生DOM事件这类属性到最终渲染的a标签上,直接给NextLink传这类属性不会生效。

这段封装就是为了省掉每次写Link都要手动嵌套a标签的重复工作,逻辑非常直白:

  1. 定义了一个React函数组件Link,它的参数类型继承了官方NextLink的所有属性,同时支持传入自定义className(实际通过剩余参数支持了所有原生a标签的合法属性)
  2. 从入参里解构出跳转目标href、链接内容children,剩下的所有传入属性都归集到props对象里
  3. 渲染时用导入的NextLink承接路由跳转能力,内部嵌套原生<a>标签,把所有归集的额外属性(比如样式类、行内样式、点击事件等)全透传给原生a标签,子内容放在a标签内部
  4. 最后导出这个封装好的Link,项目里其他页面引用的时候,直接用这个自定义组件就行,既保留了Next.js的客户端路由跳转能力,又能像用普通a标签一样加样式、绑事件。

如果你现在用的是Next.js 13及以上版本的App Router模式,官方已经把a标签的嵌套逻辑内置到Link组件里了,也支持直接透传className等原生属性,这种封装就不是必须的了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:24:19