MDX (Markdown for JSX) позволяет объединять возможности Markdown и React-компонентов, создавая интерактивный и динамический контент. Одной из частых задач является выделение строк кода или текста, чтобы улучшить читаемость и акцентировать внимание на важных частях документации или примеров.
В MDX стандартные Markdown-конструкции работают без изменений. Для выделения текста применяются:
**важный текст**
Выводится как: важный текст
*курсивный текст*
Выводится как: курсивный текст
Моноширинный текст для кода или терминов:`код или термин`
Выводится как: код или термин
Для многострочного кода используют блоки с тройными обратными кавычками (```), при этом можно указать язык для подсветки синтаксиса:
```javascript
function greet(name) {
return `Hello, ${name}!`;
}
MDX автоматически обрабатывает такие блоки, интегрируя их с React-компонентами, если используются плагины для подсветки синтаксиса, например `prism-react-renderer` или `rehype-prism`.
#### Использование компонента `<Highlight>`
MDX позволяет внедрять собственные React-компоненты прямо в Markdown. Для выделения строк часто применяют компонент `<Highlight>`:
```mdx
import Highlight from './Highlight';
<Highlight>
const sum = (a, b) => a + b;
console.log(sum(2, 3));
</Highlight>
Компонент может принимать пропсы для управления стилем:
<Highlight color="yellow" lineNumbers>
const multiply = (x, y) => x * y;
</Highlight>
color — цвет фона для выделенной строкиlineNumbers — отображение номеров строкИногда необходимо выделить не весь блок кода, а только отдельные строки. В этом случае удобно использовать маски или массив индексов:
<Highlight highlightLines={[1,3]}>
function example() {
console.log('Строка 1');
console.log('Строка 2');
console.log('Строка 3');
}
</Highlight>
Здесь будут выделены первая и третья строки блока. Поддержка таких функций зависит от используемой библиотеки для подсветки кода.
MDX позволяет вставлять HTML напрямую, что открывает дополнительные возможности:
<p style={{ backgroundColor: '#ffeb3b', padding: '4px' }}>
Важная строка текста
</p>
Этот подход эффективен для выделения отдельных абзацев или строк без создания дополнительных компонентов.
Для тонкой настройки внешнего вида выделенных строк рекомендуется
использовать CSS-модули или styled-components:
import styled from 'styled-components';
const HighlightedLine = styled.div`
background-color: #ffeaa7;
padding: 0.25em 0.5em;
border-radius: 4px;
`;
<HighlightedLine>Ключевая строка</HighlightedLine>
Такой подход позволяет централизованно управлять стилями и использовать их повторно по всему проекту.
MDX открывает возможность добавления интерактивности. Можно создавать компоненты, которые реагируют на действия пользователя:
import { useState } from 'react';
function ClickHighlight({ text }) {
const [active, setActive] = useState(false);
return (
<span
onCl ick={() => setActive(!active)}
style={{ backgroundColor: active ? 'yellow' : 'transparent', cursor: 'pointer' }}
>
{text}
</span>
);
}
<ClickHighlight text="Нажми для выделения" />
Это особенно полезно в обучающих материалах или интерактивных документациях.
Выделение строк в MDX — это гибкий инструмент, который объединяет возможности Markdown и React, позволяя создавать наглядные, структурированные и интерактивные учебные материалы.