MDX Runtime API предоставляет функциональные возможности для работы с документами MDX на этапе выполнения, позволяя динамически рендерить контент, управлять компонентами и интегрировать JSX внутри Markdown. Runtime API работает поверх стандартного процесса компиляции MDX в JavaScript, обеспечивая гибкость и контроль над содержимым в реальном времени.
mdxmdx — это основная функция Runtime API, которая служит
точкой входа для рендеринга MDX-контента. Она позволяет создавать
React-элементы из Markdown с включённым JSX.
Сигнатура функции:
import { mdx } from '@mdx-js/react';
const element = mdx('h1', { id: 'title' }, 'Заголовок');
'h1', 'p' или компонент React.Ключевое преимущество функции mdx заключается в её
универсальности: можно использовать как стандартные HTML-теги, так и
произвольные React-компоненты, передавая их напрямую.
MDXProvider позволяет задавать сопоставления между
тегами Markdown и пользовательскими React-компонентами. Это критически
важно для Runtime API, так как компоненты, переданные через провайдер,
используются функцией mdx при рендеринге.
import { MDXProvider } from '@mdx-js/react';
const components = {
h1: (props) => <h1 style={{ color: 'blue' }} {...props} />,
a: (props) => <a target="_blank" rel="noopener noreferrer" {...props} />
};
<MDXProvider components={components}>
<MDXContent />
</MDXProvider>
components.MDXContentMDXContent — это React-компонент, сгенерированный
MDX-компилятором, который использует Runtime API для рендеринга
документа.
import MDXContent from './content.mdx';
<MDXContent components={components} />
components — объект компонентов, аналогичный
использованию в MDXProvider.useMDXComponentsuseMDXComponents — хук, предоставляющий доступ к
текущему набору компонентов, заданных через MDXProvider.
Позволяет переопределять или расширять компоненты на уровне отдельных
частей приложения.
import { useMDXComponents } from '@mdx-js/react';
function CustomLink(props) {
const components = useMDXComponents({ a: MyLink });
return <components.a {...props} />;
}
Runtime API MDX позволяет использовать JSX прямо внутри Markdown-контента, что особенно удобно для интерактивных элементов.
# Пример кнопки
<CustomButton onCl ick={() => alert('Нажато!')}>Кликни меня</CustomButton>
mdx на этапе
рендеринга.MDX Runtime API поддерживает передачу дополнительных пропсов в
компоненты через components и MDXContent.
<MDXContent components={{ Button: (props) => <Button color="red" {...props} /> }} />
Runtime API облегчает работу с контентом, загружаемым на лету. Можно хранить MDX-тексты в базе данных и рендерить их без предварительной компиляции на стороне сервера.
import { mdx } from '@mdx-js/react';
import { createElement } from 'react';
const content = `
# Динамический заголовок
Пример **MDX** текста с JSX:
<CustomButton>Кнопка</CustomButton>
`;
const element = mdx('div', null, createElement('h1', null, 'Динамический заголовок'));
runtime и
расширенияНекоторые реализации MDX Runtime API предоставляют объект
runtime для глобальных настроек, регистрации плагинов и
управления обработкой MDX.
import { runtime } from '@mdx-js/runtime';
runtime.use(pluginExample);
MDX Runtime API обеспечивает полный контроль над рендерингом Markdown с JSX, делает возможным динамическое внедрение компонентов и управляемую интеграцию с React, что открывает широкие возможности для создания интерактивного, настраиваемого контента в приложениях.