MDX предоставляет возможность использовать JSX внутри Markdown, что
открывает широкие возможности для кастомизации рендеринга контента. В
основе кастомизации лежит объект components, который
позволяет заменить стандартные HTML-элементы на собственные
React-компоненты.
componentsОбъект components представляет собой словарь, где ключи
— это имена HTML-тегов или пользовательских компонентов, а значения —
React-компоненты, которые будут использоваться для рендеринга
соответствующих элементов. Пример базовой кастомизации:
import { MDXProvider } from '@mdx-js/react';
import MyHeading from './MyHeading';
import MyParagraph from './MyParagraph';
const components = {
h1: MyHeading,
p: MyParagraph
};
function App({ children }) {
return (
{children}
);
}
В этом примере все заголовки и параграфы
будут рендериться через компоненты
MyHeading и MyParagraph соответственно.
MDX позволяет изменять почти любой элемент Markdown. Наиболее часто настраиваются:
Заголовки (h1–h6)
Можно добавить дополнительные стили, анимацию или обернуть их в ссылку.
Например:
const components = {
h2: props =>
};Параграфы (p) Возможна вставка
дополнительных обработчиков событий или оберток:
const components = {
p: props =>
};Списки (ul, ol,
li) Можно добавить кастомную маркировку или
интерактивность:
const components = {
li: props =>
};MDX поддерживает импорт и использование собственных компонентов прямо в Markdown. Это позволяет создавать интерактивный контент:
import Alert from './Alert'
# Заголовок уровня 1
Это предупреждающее сообщение!
Такой подход объединяет возможности Markdown для структурирования текста с гибкостью React-компонентов для визуальной кастомизации.
MDXProvider работает через React Context, что позволяет динамически менять рендеринг элементов на уровне всего приложения или отдельных частей документа:
import { MDXProvider } from '@mdx-js/react';
import ThemeContext from './ThemeContext';
function ThemedMDX({ children }) {
const theme = useContext(ThemeContext);
const components = {
h1: props => ,
p: props =>
};
return {children} ;
}
Это позволяет легко переключать стили и поведение элементов в зависимости от темы или состояния приложения.
Некоторые элементы Markdown, такие как inlineCode,
pre, code, могут быть заменены на кастомные
компоненты для улучшения подсветки синтаксиса или стилизации кода:
import CodeBlock from './CodeBlock';
const components = {
code: CodeBlock,
pre: props =>
};
components для всей MDX-поддержки приложения.MDX идеально подходит для создания документации и технических блогов, где часто требуется кастомная подсветка кода или использование компонентов UI-библиотек. Для этого можно обернуть стандартные элементы Markdown в компоненты библиотек, например:
import { Button } from 'chakra-ui/react';
const components = {
a: props =>
};
Такой подход превращает обычный Markdown в интерактивный интерфейс без изменения исходного текста документа.