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

NextJS中Link组件href自动添加localhost,如何保留锚点#contact?

Next.js Link组件锚点href被转成绝对URL的问题解决方案

原因

Next.js 的 Link 组件默认会将 href 属性解析为绝对 URL,即便你传入的是纯锚点 #contact,它也会自动拼接当前页面的基础域名(比如 http://localhost:3000/)生成完整路径。这种设计是为了统一处理路由跳转逻辑,但对于仅需页面内锚点滚动的场景,会干扰原生锚点行为,导致无法正常滚动到目标元素。

解决方法

1. 直接使用原生 <a> 标签(最简便)

如果只是需要页面内锚点滚动,不需要 Next.js 的路由跳转能力,直接用原生 HTML 标签替代 Link 组件即可:

<a href="#contact">联系我们</a>

这样生成的 href 就是纯 #contact,点击后会原生触发滚动到页面内 id="contact" 的元素。

如果想保留 Link 组件的样式或其他特性,可以手动阻止默认路由跳转,实现自定义锚点滚动:

import Link from 'next/link';

const handleAnchorScroll = (e) => {
  e.preventDefault();
  const targetElement = document.getElementById('contact');
  targetElement?.scrollIntoView({ behavior: 'smooth' });
};

<Link href="#contact" onClick={handleAnchorScroll}>
  联系我们
</Link>

注:此方法在 Next.js 12 及之前的 Pages Router 中适用,App Router 中可结合 scroll 属性调整。

3. App Router 下的配置(Next.js 13+)

使用 App Router 时,可通过 as 属性指定显示的锚点格式,并启用 scroll 确保滚动行为:

import Link from 'next/link';

<Link href="#contact" as="#contact" scroll={true}>
  联系我们
</Link>

这种方式会让生成的 <a> 标签显示 href="#contact",同时触发原生锚点滚动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:28:20