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

在Docusaurus的React组件中添加可显示于目录的标题

解决React组件中标题显示在Docusaurus文档目录的问题

问题原因

Docusaurus的文档目录(TOC)是在构建时扫描页面中的原生标题元素(h1-h6)或MDX标题生成的。你之前使用的Heading组件仅实现了样式和链接功能,但未被TOC解析器识别;而MDX的用法有误,导致无法正常渲染并被TOC捕获。

解决方案

方法1:使用原生HTML标题+Docusaurus样式类

直接使用原生h2元素,并添加Docusaurus的样式类,既保证TOC能识别,又保持正确样式:

<h2 id="my-heading" className="text--primary font-size--xl">My Heading</h2>

(注:text--primary和font-size--xl是Docusaurus默认标题的样式类,可根据主题调整)

方法2:通过MDXComponents渲染标题

利用Docusaurus提供的useMDXComponents钩子,使用MDX体系内的标题组件,确保被TOC解析:

import { useMDXComponents } from '@docusaurus/theme-common';

export default function MyComponent() {
  const MDXComponents = useMDXComponents();
  return <MDXComponents.h2 id="my-heading">My Heading</MDXComponents.h2>;
}

方法3:手动注册标题到TOC

如果标题是动态生成的,可使用useTOCClient钩子手动添加TOC项:

import { useTOCClient } from '@docusaurus/theme-common/internal';
import { useEffect } from 'react';

export default function MyComponent() {
  const tocClient = useTOCClient();

  useEffect(() => {
    const heading = {
      value: 'My Heading',
      id: 'my-heading',
      level: 2,
    };
    tocClient.addHeading(heading);
    
    // 组件卸载时移除
    return () => tocClient.removeHeading(heading.id);
  }, [tocClient]);

  return <h2 id="my-heading">My Heading</h2>;
}

纠正你之前的MDX用法错误

你之前的MDX代码存在用法问题,正确的方式是将MDX内容通过MDXContent渲染,而非传递给MDXProvider的components属性:

import { MDXContent } from '@mdx-js/react';

const mdxHeading = {
  type: 'heading',
  depth: 2,
  children: [{ type: 'text', value: 'My Heading' }],
  data: { id: 'my-heading' }
};

export default function MyComponent() {
  return <MDXContent>{mdxHeading}</MDXContent>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:45:13