Плейсхолдеры в MDX позволяют вставлять динамический или заранее определённый контент прямо в Markdown-разметку с возможностью использования компонентов React. Они являются одним из ключевых механизмов интеграции JSX внутри MDX-документов, обеспечивая гибкость при создании документации, блогов и интерактивных интерфейсов.
В MDX можно включать JSX-компоненты напрямую:
<Alert type="warning">
Внимание! Данные устарели.
</Alert>
Здесь <Alert /> выступает в роли
плейсхолдера, который в момент рендеринга заменяется на
соответствующий React-компонент с переданными пропсами.
Особенности:
import Alert from './Alert';
export default function Page() {
return (
<MDXProvider>
<MDXContent />
</MDXProvider>
);
}
MDX поддерживает синтаксис интерполяции выражений через
{}. Это позволяет использовать переменные JavaScript как
плейсхолдеры:
export const userName = "Иван";
Привет, {userName}! Добро пожаловать в документацию.
Ключевые моменты:
{} можно использовать любые валидные
JavaScript-выражения.Можно использовать функции, возвращающие JSX, для более сложной логики:
export function WelcomeMessage(user) {
return <p>Добро пожаловать, {user}!</p>;
}
<WelcomeMessage user="Мария" />
Преимущества такого подхода:
MDXProvider позволяет задавать, какие компоненты будут
автоматически использоваться вместо стандартных элементов Markdown:
import { MDXProvider } from '@mdx-js/react';
import CodeBlock from './CodeBlock';
const components = {
code: CodeBlock,
h1: (props) => <h1 style={{ color: 'blue' }} {...props} />
};
<MDXProvider components={components}>
<MDXContent />
</MDXProvider>
Особенности:
<h1>, <code>
и др. могут быть заменены на кастомные компоненты.MDX-файлы могут принимать props, что позволяет создавать интерактивные и настраиваемые элементы:
# Пример динамического контента
<ProfileCard name={props.name} age={props.age} />
При рендеринге:
<MDXContent name="Алексей" age={28} />
Плейсхолдеры автоматически получают данные через пропсы, что обеспечивает высокую гибкость.
MDX поддерживает условные выражения в JSX:
{isLoggedIn ? <p>Вы вошли в систему</p> : <p>Пожалуйста, войдите</p>}
Важно учитывать:
MDX позволяет внедрять интерактивные элементы, которые реагируют на события пользователя:
function Counter() {
const [count, setCount] = React.useState(0);
return <button onCl ick={() => setCount(count + 1)}>Нажато {count} раз</button>;
}
<Counter />
Плейсхолдер здесь не только отображает содержимое, но и управляет состоянием, полностью интегрируясь с React.
MDXProvider.Плейсхолдеры делают MDX мощным инструментом для объединения Markdown и React, позволяя создавать не просто статичные документы, а интерактивные, настраиваемые интерфейсы.