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

Next.js 13.4中Link组件锚点跳转失效问题求助

Next.js 13.4 锚点跳转问题解决方案

问题原因

Next.js 13 App Router 中的 Link 组件,默认的客户端导航逻辑不会触发同一页面内的原生锚点滚动行为,导致点击按钮后无跳转反应;而手动在地址栏输入锚点 URL 时,是由浏览器直接处理锚点定位,因此可以正常跳转。

解决方案

同一页面内的锚点跳转不需要依赖客户端路由功能,直接用原生 <a> 标签即可解决问题:

// 修改 Hero 组件中的按钮容器代码
<div className='pt-5'>
  <a href='#about'>
    <button className='heroButton'>About</button>
  </a>
  <a href='#experience'>
    <button className='heroButton'>Experience</button>
  </a>
  <a href='#skills'>
    <button className='heroButton'>Skills</button>
  </a>
  <a href='#projects'>
    <button className='heroButton'>Projects</button>
  </a>
</div>

如果需要保留 Link 组件(比如后续有扩展路由的需求),可以通过 onClick 事件手动触发锚点滚动:

// Hero 组件中修改 Link 部分代码
<div className='pt-5'>
  <Link 
    href="#about" 
    onClick={(e) => {
      e.preventDefault();
      const targetElement = document.getElementById('about');
      targetElement?.scrollIntoView({ behavior: 'smooth' });
    }}
  >
    <button className='heroButton'>About</button>
  </Link>
  <Link 
    href="#experience" 
    onClick={(e) => {
      e.preventDefault();
      const targetElement = document.getElementById('experience');
      targetElement?.scrollIntoView({ behavior: 'smooth' });
    }}
  >
    <button className='heroButton'>Experience</button>
  </Link>
  {/* Skills、Projects 按钮同理处理 */}
</div>

额外验证点

  • 确认目标 <section> 的 id 属性与跳转链接的 href 完全匹配(你的代码中 #about 对应 <section id='about'>,匹配逻辑正确)
  • 父容器的 snap-y snap-mandatory 样式与锚点滚动不冲突,手动输入 URL 能正常跳转已验证这一点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:17:08