MDX предоставляет расширенные возможности для вставки и форматирования блоков кода в документации и приложениях на React. В отличие от стандартного Markdown, MDX позволяет интегрировать компоненты React прямо внутрь блоков кода или использовать их для стилизации и интерактивности.
Блоки кода создаются с использованием тройных обратных кавычек:
```javascript
const sum = (a, b) => a + b;
console.log(sum(2, 3));
**Ключевые моменты:**
- Язык программирования указывается сразу после тройных обратных кавычек (`javascript`, `ts`, `python` и др.).
- Если язык не указан, блок кода будет отображен как обычный текст.
- MDX сохраняет стандартное поведение Markdown, но позволяет добавлять JSX внутри документа.
---
#### Встраивание компонентов React в блоки кода
MDX поддерживает использование JSX внутри документа, что позволяет добавлять интерактивные элементы рядом с блоками кода:
```jsx
{`
function greet(name) {
return \`Hello, \${name}!\`;
}
console.log(greet('MDX'));
`}
Особенности подхода:
CodeBlock может быть кастомным и включать
подсветку синтаксиса.MDX позволяет полностью контролировать стили блоков кода с помощью CSS или styled-components:
{`const multiply = (x, y) => x * y;`}
Важные моменты:
отвечает за сохранение
форматирования кода. содержит сам текст кода.Подсветка синтаксиса в MDX чаще всего реализуется через внешние библиотеки. Например, Prism.js:
import Prism from "prismjs";
import "prismjs/themes/prism-tomorrow.css";
{`const divide = (a, b) => a / b;`}
Особенности использования:
language-js определяет язык для подсветки.MDX позволяет создавать интерактивные примеры с живым кодом,
используя библиотеки вроде react-live:
import { LiveProvider, LiveEditor, LivePreview } from 'react-live';
alert('Hello')}>Click me`}>
Ключевые преимущества:
MDX позволяет легко подключать внешние компоненты и библиотеки для работы с кодом:
Пример интеграции с Prism-react-renderer:
import Highlight, { defaultProps } from "prism-react-renderer";
{({ className, style, tokens, getLineProps, getTokenProps }) => (
{tokens.map((line, i) => (
{line.map((token, key) => (
))}
))}
)}
Преимущества такого подхода:
MDX поддерживает как многострочные блоки, так и встроенные однострочные выражения:
`const version = "1.0.0";`
MDX прекрасно работает с TypeScript, JSX и другими языками:
type User = {
name: string;
age: number;
};
const user: User = { name: "Alice", age: 30 };
console.log(user);
Для учебников и документации удобно добавлять номера строк или аннотации к коду. С помощью кастомных компонентов можно реализовать:
const AnnotatedLine = ({ number, children }) => (
{number}
{children}
);
const a = 5;
const b = 10;
console.log(a + b);