MDX — это расширение Markdown, позволяющее включать JSX-компоненты прямо в тексте. Для начала работы необходимо установить соответствующие пакеты:
npm install @mdx-js/react @mdx-js/loader
В проекте на React подключение MDX осуществляется через
MDXProvider. Он позволяет обернуть приложение и задать
кастомные компоненты для различных элементов Markdown, например, для
заголовков, ссылок и блоков кода.
import { MDXProvider } from '@mdx-js/react';
import MyCustomH1 from './components/MyCustomH1';
const components = {
h1: MyCustomH1,
};
function App({ children }) {
return (
<MDXProvider components={components}>
{children}
</MDXProvider>
);
}
Для работы MDX с Webpack требуется добавить загрузчик:
module.exports = {
module: {
rules: [
{
test: /\.mdx?$/,
use: [
'babel-loader',
'@mdx-js/loader'
]
}
]
}
};
Для Vite достаточно использовать официальный плагин
@mdx-js/rollup:
import mdx from '@mdx-js/rollup';
export default {
plugins: [
mdx()
]
};
Файл с расширением .mdx может содержать как обычный
Markdown, так и JSX. Например:
# Заголовок первого уровня
Текстовый блок с обычным Markdown.
<MyComponent prop="value" />
Импорт MDX в React-компонент выглядит так:
import Content from './example.mdx';
function Page() {
return <Content />;
}
MDX-файл компилируется в React-компонент, который можно использовать как любой другой.
Чтобы убедиться, что MDX работает корректно, следует выполнить несколько проверок:
# Тестовый заголовок
- Пункт 1
- Пункт 2
- Пункт 3
<MyTestComponent text="MDX работает" />
Если компонент отобразился, значит MDX правильно интерпретирует JSX.
<MyTestComponent title="Пропс заголовка" count={5} />
В React-компоненте следует проверить значения
props.title и props.count.
MDXProvider:const components = {
h1: ({ children }) => <h1 style={{ color: 'red' }}>{children}</h1>
};
MDX-документ с заголовком # Пример должен отобразиться
красным цветом.
Чаще всего ошибки при работе с MDX связаны с:
babel-loader и @mdx-js/loader
установлены и прописаны корректно.@mdx-js/react и @mdx-js/loader соответствовали
друг другу и проекту React.Для CI/CD можно настроить простые тесты рендеринга MDX:
import { render } from '@testing-library/react';
import Content from './example.mdx';
test('MDX рендерится без ошибок', () => {
const { getByText } = render(<Content />);
expect(getByText('Тестовый заголовок')).toBeInTheDocument();
});
Такой тест гарантирует, что изменения в MDX-файлах не ломают отображение приложения.
Для промежуточной проверки можно добавлять простое логирование пропсов или состояния:
<MyTestComponent text="Проверка" onCl ick={() => console.log('Клик')} />
При взаимодействии в консоли должны появляться соответствующие сообщения. Это помогает убедиться, что MDX и React-компоненты работают совместно корректно.
После настройки всех компонентов, сборщика и провайдера, тестирование MDX должно включать:
MDXProviderТакой подход позволяет гарантировать стабильную работу MDX в любом React-проекте и выявлять ошибки на раннем этапе.