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

如何为单页API文档在Nextra导航栏添加锚点标签?

Nextra单页API文档实现嵌套锚点导航解决方案

1. 定义嵌套锚点导航配置

放弃默认的_meta.js多页面配置,直接在API文档页面同级创建自定义导航文件(比如api-nav.js),按嵌套结构写好锚点信息:

export default [
  {
    label: 'API 概览',
    href: '#api-overview'
  },
  {
    label: '用户接口',
    items: [
      {
        label: '获取用户列表',
        href: '#get-user-list'
      },
      {
        label: '创建用户',
        href: '#create-user'
      }
    ]
  },
  {
    label: '订单接口',
    items: [
      {
        label: '查询订单',
        href: '#query-order'
      }
    ]
  }
]

2. 自定义Layout渲染嵌套导航

修改layout.jsx,导入上面的导航配置,替换默认Navbar或者在原有布局中加入自定义锚点导航区,同时处理锚点跳转的平滑滚动:

import { useRouter } from 'next/navigation'
import apiNav from './api-nav'

export default function APILayout({ children }) {
  const router = useRouter()

  const jumpToAnchor = (href) => {
    router.push(href, { scroll: false })
    setTimeout(() => {
      const target = document.querySelector(href)
      target?.scrollIntoView({ behavior: 'smooth' })
    }, 100)
  }

  const renderNav = (items) => {
    return items.map(item => (
      <div key={item.href || item.label} className="mb-2">
        {item.items ? (
          <div className="ml-2">
            <div className="font-semibold py-1">{item.label}</div>
            <div className="pl-2">{renderNav(item.items)}</div>
          </div>
        ) : (
          <button
            onClick={() => jumpToAnchor(item.href)}
            className="w-full text-left py-1 hover:text-blue-600"
            style={{ background: 'none', border: 'none', cursor: 'pointer' }}
          >
            {item.label}
          </button>
        )}
      </div>
    ))
  }

  return (
    <div className="flex">
      {/* 左侧自定义锚点导航 */}
      <aside className="w-64 border-r p-4 overflow-y-auto">
        {renderNav(apiNav)}
      </aside>
      {/* 文档内容 */}
      <main className="flex-1 p-8">{children}</main>
    </div>
  )
}

3. 配置Nextra与页面锚点

  • 在next.config.js中确保Nextra开启App Router支持:
const withNextra = require('nextra')({
  theme: 'nextra-theme-docs',
  themeConfig: './theme.config.jsx',
})

module.exports = withNextra({
  appDir: true,
})
  • 在单页MDX文档里给每个章节指定锚点ID(Nextra也会自动根据标题生成slug锚点,比如## 获取用户列表会生成#获取用户列表的锚点,也可以手动指定):
# API 概览 {#api-overview}

## 用户接口
### 获取用户列表 {#get-user-list}
接口地址:`GET /api/users`
请求参数:...

### 创建用户 {#create-user}
接口地址:`POST /api/users`
请求参数:...

## 订单接口
### 查询订单 {#query-order}
接口地址:`GET /api/orders/:id`
请求参数:...

4. 适配样式(可选)

如果自定义导航和Nextra默认主题风格不一致,可添加CSS调整样式,让导航栏和默认Navbar视觉统一:

aside {
  height: 100vh;
  position: sticky;
  top: 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:04:53