MDX (Markdown for JSX) представляет собой расширение стандартного Markdown, позволяющее интегрировать компоненты React прямо в текстовый контент. Основное отличие MDX от обычного Markdown заключается в возможности смешивания разметки с интерактивными элементами, компонентами и логикой на JavaScript.
В основе MDX лежат три ключевых элемента:
import,
export), что позволяет подключать внешние библиотеки и
компоненты.MDX-документ можно представить как сочетание обычного Markdown и React-компонентов. Простейший пример структуры:
import { Alert } from './components/Alert'
# Заголовок документа
Текстовое содержимое с **Markdown**-разметкой.
Это предупреждение, реализованное через React-компонент.
Здесь:
import { Alert } from './components/Alert' подключает
внешний компонент.# Заголовок документа — стандартный заголовок
Markdown.... —
JSX-компонент, встроенный в текст.MDX позволяет не только отображать компоненты, но и использовать их свойства, передавать динамические данные и комбинировать с обычной Markdown-разметкой.
MDX поддерживает полные возможности ES Modules:
import Button from './Button'
import { Card, Header } from './UI'
export const meta = {
title: 'Пример документа MDX',
date: '2026-03-23'
}
import позволяет подключать компоненты, утилиты и даже
данные.export используется для метаданных документа или
экспортирования функций, которые могут быть использованы в других частях
приложения.Использование экспорта метаданных особенно полезно в системах статической генерации, например Next.js или Gatsby, где можно динамически формировать списки страниц и SEO-данные.
MDX позволяет вставлять компоненты React как элементы JSX. Встроенные компоненты могут быть как простыми визуальными блоками, так и интерактивными элементами с состоянием.
Пример динамического компонента:
import { Counter } from './Counter'
Здесь компонент Counter может содержать локальное
состояние и обработчики событий, полностью функционируя внутри
MDX-документа.
MDX автоматически преобразует JSX в React-код при сборке, поэтому компоненты работают без дополнительной настройки.
MDX предоставляет возможность кастомизации стандартных HTML-тегов, генерируемых Markdown. Например, можно заменить все заголовки или ссылки на собственные компоненты:
// components/MDXComponents.js
import { H1, H2, CustomLink } from './UI'
export const components = {
h1: H1,
h2: H2,
a: CustomLink
}
Затем при рендеринге MDX можно передать этот объект:
import { MDXProvider } from '@mdx-js/react'
import { components } from './components/MDXComponents'
import Document from './doc.mdx'
В результате все # и ## будут использовать
кастомные React-компоненты H1 и H2, а ссылки —
CustomLink.
MDX поддерживает JavaScript внутри документа, что позволяет внедрять динамический контент:
export const today = new Date().toLocaleDateString()
Сегодняшняя дата: {today}
Также можно использовать функции и массивы:
const items = ['Первый', 'Второй', 'Третий']
{items.map(item => (
- {item}
))}
MDX автоматически превращает JavaScript-выражения в JSX и рендерит результат.
Для работы с MDX существует несколько ключевых инструментов:
.mdx в React-код.MDXProvider для рендеринга MDX-документов в React.@next/mdx, gatsby-plugin-mdx).Каждый инструмент обеспечивает поддержку различных функций, от простой документации до сложных интерактивных интерфейсов.