Шаблоны и макросы

MDX (Markdown for JSX) сочетает возможности Markdown и JSX, предоставляя мощный инструмент для создания динамического и интерактивного контента. Одним из ключевых элементов эффективной работы с MDX являются шаблоны и макросы, которые позволяют ускорить разработку и повысить повторное использование компонентов.


Использование компонентов как шаблонов

В MDX любая JSX-компонента может выступать в роли шаблона. Например, если необходимо многократно вставлять блоки с одинаковой структурой, создаётся отдельная компонентa:

const InfoBox = ({ title, children }) => (
  

{title}

{children}
);

Далее этот шаблон используется в MDX-файле:


  Здесь размещается критическая информация.



  Используйте повторно этот компонент для любых заметок.

Ключевые преимущества:

  • Одно изменение в компоненте обновляет все блоки.
  • Снижается количество дублирующего кода.
  • Улучшается поддерживаемость проекта.

Макросы для динамического контента

MDX поддерживает возможность внедрения JavaScript-выражений прямо в текст. Это открывает доступ к макросам — функциям, которые генерируют повторяющийся контент.

Пример макроса для генерации списка ссылок:

const LinkList = ({ links }) => (
  
);

Использование макроса в MDX:

Особенности макросов:

  • Позволяют формировать контент на лету.
  • Могут принимать любые данные, включая объекты, массивы и функции.
  • Совместимы с React-хуками и состоянием для интерактивности.

Параметризованные шаблоны

Параметры позволяют шаблонам быть максимально гибкими. Рассмотрим компонент Card с параметрами цвета и размера:

const Card = ({ title, content, color = 'lightblue', size = 'medium' }) => (
  

{title}

{content}

);

MDX-файл:


Преимущества параметризации:

  • Минимизируется количество компонентов.
  • Легко настраивать стиль и поведение для разных сценариев.
  • Поддерживается единый API для различных контентных блоков.

Инлайновые макросы и вычисления

MDX позволяет вставлять JavaScript-выражения прямо в текст:

Сегодняшняя дата: {new Date().toLocaleDateString()}

Результат сложения: {5 + 7}

Это открывает возможности для макросов, которые вычисляют данные в реальном времени. Например:

const Greeting = ({ name }) => `Привет, ${name}! Сегодня отличная погода.`;

Использование в MDX:

{Greeting({ name: 'Алексей' })}

Особенности:

  • Вычисления выполняются на этапе рендеринга.
  • Поддерживаются любые выражения JavaScript.
  • Позволяет комбинировать статический контент с динамическим.

Организация повторяемых блоков

Для больших проектов важно структурировать шаблоны и макросы:

  1. Компоненты в отдельной папке Все повторяющиеся элементы вынести в /components.

  2. Импорт шаблонов в MDX

    import { InfoBox, Card } from '../components'
  3. Использование параметров и пропсов Минимизировать дублирование кода и сделать контент гибким.

  4. Макросы для динамических данных Применять функции и вычисления для генерации повторяющихся блоков на основе массивов или объектов.


Совмещение Markdown и JSX

Главная сила MDX — возможность использовать шаблоны и макросы прямо в тексте Markdown:

# Документация


  Используйте этот блок для всех критических уведомлений.


Текущая версия приложения: {process.env.APP_VERSION}

Преимущества подхода:

  • Контент остаётся читабельным.
  • Интерфейс остаётся динамичным и интерактивным.
  • Комбинация Markdown и JSX ускоряет процесс создания документации и учебных материалов.