close

MDX и React-компоненты

Rspress поддерживает MDX, формат создания контента, который безупречно сочетает Markdown с JSX. MDX позволяет использовать React-компоненты непосредственно в вашей документации, объединяя лаконичный синтаксис Markdown с мощью экосистемы React, что делает его идеальным для создания интерактивной, основанной на компонентах технической документации.

Что такое MDX

MDX — это сочетание синтаксиса Markdown и JSX, которое позволяет писать и использовать React-компоненты непосредственно в Markdown-документах.

Мы рекомендуем использовать расширение .mdx для всех файлов документации, что позволяет писать контент так же, как в обычном Markdown, а также импортировать и использовать встроенные компоненты, предоставляемые Rspress.

docs/index.mdx
# Привет, мир!

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

Вы можете использовать встроенные компоненты, предоставляемые Rspress, или подключить сторонние библиотеки React-компонентов, чтобы обогатить документацию в файлах .mdx.

Соглашение о маршрутах

В директории docs фрагменты MDX или React-компоненты необходимо исключать из маршрутизации с помощью параметра route.exclude. Для удобства файлы, начинающиеся с символа _, по умолчанию исключаются через route.excludeConvention.

Также вы можете размещать компоненты в соседних директориях вне директории docs, например:

docs
├── _button.mdx
└── index.mdx
components
└── button.tsx
docs/index.mdx
docs/_button.mdx
docsite/components/button.tsx
import ButtonFragment from './_button.mdx';
import Button from '../../components/button';

<ButtonFragment />
<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 не будет стилизоваться

Предупреждение

Синтаксис tsx и html затрудняет извлечение статической информации, например, индексов для локального поиска.

Поэтому рекомендуется писать основной контент документации в файлах .mdx, а файлы .tsx использовать только для интерактивного и динамического содержимого.

Требования к версиям React

ЗависимостьДопустимый диапазонВерсия по умолчаниюПримечания
react`^18.0.0^19.0.0`
react-dom`^18.0.0^19.0.0`
react-router-dom`^6.0.0^7.0.0`
Совет

Если react, react-dom или react-router-dom уже установлены в вашем проекте, Rspress будет в первую очередь использовать версию, установленную в вашем проекте, а не встроенную версию по умолчанию.