close
  • 中文
  • MDX 和 React 组件

    Rspress 支持 MDX,这是一种将 Markdown 与 JSX 无缝融合的内容创作格式。MDX 允许你在文档中直接使用 React 组件,结合了 Markdown 的简洁语法和 React 生态的强大能力,非常适合构建交互式、组件化的技术文档。

    什么是 MDX

    MDX 是 Markdown 与 JSX 语法的结合,让你可以在 Markdown 文档中使用 React 组件。

    我们推荐所有文档文件均使用 .mdx,这样既可以像普通 Markdown 一样编写内容,又能导入和使用 Rspress 提供的 文档组件

    docs/index.mdx
    # Hello, world!
    
    import { PackageManagerTabs } from '@rspress/core/theme';
    
    <PackageManagerTabs command="create rspress@latest" />

    MDX 片段

    在 MDX 中,每个 .mdx 文件都会编译为 React 组件,这意味着它既可以被当做组件引用,也可以自由使用 React 组件。例如:

    docs/index.mdx
    docs/_mdx-fragment.mdx
    docs/_tsx-component.tsx
    import MdxFragment from './_mdx-fragment.mdx';
    import TsxComponent from './_tsx-component';
    
    测试 MDX 片段和 React 组件的使用。
    
    <MdxFragment />
    
    <TsxComponent />

    它将被渲染为:

    测试 MDX 片段和 React 组件的使用。

    这是来自 mdx 的片段

    这是来自 tsx 的组件

    你可以在 .mdx 文件中使用 Rspress 提供的 文档组件 或安装一些 React 组件库来丰富你的文档。

    路由约定

    docs 目录 中,使用 MDX 片段或 React 组件要通过 route.exclude 配置从路由中排除。为方便使用,我们约定以 "_" 开头的文件会被 route.excludeConvention 默认排除。

    你也可以将组件放到 docs 目录以外的相邻目录,例如:

    docs
    _button.mdx
    index.mdx
    components
    button.tsx
    docs/index.mdx
    docs/_button.mdx
    components/button.tsx
    import ButtonFragment from './_button.mdx';
    import Button from '../../components/button';
    
    <ButtonFragment />
    <Button />

    它将被渲染为:

    button

    这是一段来自 MDX 的文本

    逃生舱:在 tsx 中编写文档内容

    _escape-hatch.tsx
    import { getCustomMDXComponent } from '@rspress/core/theme';
    
    export default () => {
      const { p: P, code: Code } = getCustomMDXComponent();
      return (
        <P className="rp-doc">
          这是一段在 tsx 中的内容,不过样式和在文档中的样式一样,比如
          <Code>@rspress/core</Code>。 但是 含有 className="rp-not-doc" 的这段文字
          <Code className="rp-not-doc">@rspress/core</Code> 不会生效
        </P>
      );
    };
    

    它将被渲染为:

    这是一段在 tsx 中的内容,不过样式和在文档中的样式一样,比如@rspress/core。 但是 含有 className="rp-not-doc" 的这段文字@rspress/core 不会生效

    Warning

    tsx 和 html 语法会导致静态信息难以提取,比如本地搜索索引。

    更推荐使用 .mdx 文件来编写文档内容,使用 .tsx 文件来编写需交互的动态内容。

    React 相关版本

    依赖允许范围默认版本说明
    react^18.0.0 || ^19.0.019不再支持 React 17
    react-dom^18.0.0 || ^19.0.019与 react 版本保持一致
    react-router-dom^6.0.0 || ^7.0.07如项目已安装则使用项目版本
    Tip

    如果你的项目中已安装 reactreact-domreact-router-dom,Rspress 会优先使用项目中安装的版本,而非内置的默认版本。