MDX (Markdown + JSX) — это расширение Markdown, позволяющее
интегрировать JSX-компоненты прямо в текстовые документы. В редакторах
MDX особое внимание уделяется синтаксису, совместимости с JSX и
возможности динамически подключать React-компоненты.
Синтаксис MDX
MDX сочетает Markdown-разметку с возможностью вставки
JSX-компонентов. Основные элементы синтаксиса:
- Markdown-разметка: заголовки (
#,
##), списки (-, *), ссылки,
цитаты и таблицы работают так же, как в обычном Markdown.
- JSX-компоненты: любой React-компонент можно
использовать внутри документа с передачей пропсов.
Пример вставки компонента:
<Button color="blue" size="large">Нажми меня</Button>
- Инлайновые выражения: поддерживаются фигурные
скобки
{} для вставки переменных и выражений
JavaScript.
Сегодняшняя дата: {new Date().toLocaleDateString()}
- Экспорт и импорт компонентов: MDX позволяет
импортировать компоненты сверху документа:
import Alert from './Alert'
<Alert type="warning">
Внимание! Здесь важное сообщение.
</Alert>
Работа с редакторами MDX
Редакторы MDX обеспечивают несколько ключевых возможностей:
1. Подсветка синтаксиса
Поддержка подсветки как для Markdown, так и для JSX-компонентов:
- Markdown-разметка выделяется стандартным способом.
- JSX-компоненты подсвечиваются по синтаксису JavaScript.
- Пропсы компонентов отображаются как отдельные токены, что облегчает
чтение и редактирование.
2. Автодополнение компонентов
Современные MDX-редакторы интегрируются с системой компонентов
React:
- Подсказывают доступные компоненты при вводе
<.
- Автозавершают имена пропсов и их значения.
- Уменьшают ошибки синтаксиса и ускоряют написание документации.
3. Превью документа
MDX-редакторы поддерживают live-превью:
- Рендерит Markdown и JSX одновременно.
- Обновление происходит в реальном времени по мере
редактирования.
- Позволяет проверять, как компонент отображается в контексте
текста.
4. Обработка ошибок
Редакторы MDX способны обнаруживать синтаксические ошибки:
- Неправильный JSX встраивается как ошибка.
- Некорректные пропсы подсвечиваются.
- Markdown-ошибки (например, неправильное вложение списков) также
показываются.
5. Поддержка плагинов
MDX-редакторы часто интегрируются с системой плагинов:
- Плагины для автоматической генерации оглавления.
- Плагины для подсветки кода внутри MDX.
- Возможность расширять синтаксис Markdown новыми конструкциями.
Особенности интеграции с
React
MDX изначально создавался для использования в экосистеме React.
Основные моменты:
- Компоненты могут быть динамическими: передача
данных через пропсы позволяет строить интерактивные документы.
- Контекст и хуки React работают в MDX: можно
использовать
useState, useEffect прямо в
компоненте.
- Обновление контента: при изменении состояния
компонента происходит реактивный рендер документа.
Пример динамического компонента в MDX:
import Counter from './Counter'
<Counter initialValue={5} />
Организация проекта с MDX
Для эффективной работы с MDX важно структурировать проект:
- Папка
components: хранение всех
React-компонентов, используемых в MDX.
- Папка
docs или pages:
хранение самих MDX-документов.
- Импорты в начале файла: все компоненты
импортируются сверху, чтобы избежать ошибок рендера.
- Использование Layout-компонентов: можно оборачивать
контент в общий шаблон с шапкой, навигацией и футером.
Инструменты и редакторы для
MDX
Популярные редакторы и инструменты для работы с MDX:
- VS Code с плагином
MDX — подсветка
синтаксиса, автодополнение JSX и Markdown.
- Storybook Docs — позволяет писать документацию
компонентов в MDX с превью.
- Next.js с
@next/mdx — интеграция MDX в
React-приложения.
- Gatsby с
gatsby-plugin-mdx — генерация
статических сайтов на основе MDX.
Практические советы по
редактированию
- Сохранять отдельные компоненты вне MDX для повторного
использования.
- Проверять рендер в live-превью перед публикацией.
- Использовать именованные экспорты для компонентов, чтобы избежать
конфликтов.
- Структурировать длинные MDX-документы с помощью заголовков и
секций.
Эта методика позволяет создавать гибкую документацию, где текстовая
информация и интерактивные компоненты органично сосуществуют,
обеспечивая богатый пользовательский опыт и упрощая поддержку больших
проектов.