В веб‑разработке часто требуется аккуратно отображать фрагменты кода: с подсветкой синтаксиса, нумерацией строк и удобной функцией копирования. Код‑блоки повышают понятность документации, туториалов и интерфейсов для разработчиков.
Установка библиотеки
Создайте React‑приложение (например, через create-react-app) и установите библиотеку react-code-blocks через npm. Откройте терминал, перейдите в корень проекта и выполните:
npm install react-code-blocks
Это добавит react-code-blocks в зависимости проекта.
Важно: библиотека работает на клиенте; если вы используете серверный рендеринг (SSR), проверьте поведение подсветки и отложите рендеринг на клиентской стороне.
Добавление CodeBlock в проект
Импортируйте компонент CodeBlock и используйте его в вашем компоненте:
import { CodeBlock } from "react-code-blocks";
Пример простого использования:
Пояснение основных пропсов:
text (обязательно): текст кода для отображения.
language (обязательно): язык программирования для подсветки.
showLineNumbers: логическое, показывает номера строк (по умолчанию false).
theme: тема подсветки — строка с именем встроенной темы или объект с цветами (по умолчанию GitHub).
startingLineNumber: с какого номера начать нумерацию (по умолчанию 1).
codeBlock: объект с опциями, например { lineNumbers: boolean, wrapLines: boolean }.
В этом примере указана тема atom-one-dark, нумерация начинается с 10, lineNumbers выключен через codeBlock, включён перенос строк и добавлен обработчик клика.
Важно: конфликт между showLineNumbers и codeBlock.lineNumbers нужно учитывать — библиотека может отдавать приоритет одному из пропсов; проверяйте поведение в вашей версии.
Темы для код‑блоков
react-code-blocks включает набор встроенных тем (например, GitHub, atom-one-dark, dracula). Вы также можете передать объект темы для полного контроля над цветами.
SSR (Next.js): проверьте, что подсветка выполняется на клиенте или используйте динамический импорт без SSR.
Размер бандла: если важен вес сборки, сравните с prism-react-renderer и highlight.js по итоговому размеру.
Модель принятия решения
Mermaid диаграмма для выбора решения:
flowchart TD
A[Нужны код-блоки] --> B{Нужна ли копия кода}
B -- Да --> C[react-code-blocks + CopyBlock]
B -- Нет --> D{Нужна ли SSR-совместимость}
D -- Да --> E[prism + серверная подсветка]
D -- Нет --> F[prism-react-renderer или react-syntax-highlighter]
Практические рекомендации и лучшие практики
Предлагайте переключатель темы (тёмная/светлая) для удобства пользователей.
Контролируйте длину линий: включайте wrapLines для адаптивности на мобильных устройствах.
Минимизируйте зависимости: если нужен только статический подсвет, отдайте предпочтение лёгким библиотекам.
Обрабатывайте большие блоки кода ленивой загрузкой.
Примеры использования в документации
Вставляйте компактные демонстрации и ссылку на полный пример в sandboxes (CodeSandbox, StackBlitz).
Для интерактивных примеров используйте iframe или интеграцию с runnable playground.
Итоговая сводка
Использование react-code-blocks даёт быстрый путь к аккуратным, настраиваемым и удобным код‑блокам в React‑приложениях. Дополнения вроде CopyBlock и кастомных тем повышают удобство для пользователей. Если у вас строгие требования к SSR, производительности или минимизации бандла, рассмотрите альтернативные библиотеки.
Важно: проверяйте поведение props showLineNumbers и codeBlock.lineNumbers в вашей версии пакета.
Summary:
react-code-blocks удобен для большинства документов и интерфейсов.
Добавление CopyBlock улучшает UX для разработчиков.
Кастомные темы дают контроль над внешним видом, но тестируйте контраст и доступность.
Если нужно, могу подготовить готовый компонент-обёртку с переключателем темы, доступностью и тестами для вашего репозитория.