MDX (Markdown + JSX) объединяет гибкость Markdown с мощью компонентов React. В отличие от обычного Markdown, MDX позволяет внедрять React-компоненты прямо в текст, обеспечивая динамическое и интерактивное отображение контента. Это делает MDX особенно полезным для документации, учебников и блогов с интерактивными элементами.
MDX поддерживает стандартный синтаксис Markdown: заголовки, списки, таблицы, ссылки, изображения. Ключевое отличие — возможность вставки JSX-компонентов:
# Пример заголовка
Текст с **жирным шрифтом** и *курсивом*.
здесь является обычным
React-компонентом, который будет рендериться на месте тега.
MDX позволяет импортировать компоненты непосредственно в документ:
import VideoPlayer from './VideoPlayer'
Компонент VideoPlayer можно полностью контролировать
через пропсы, что обеспечивает гибкость в работе с медиа, формами и
интерактивными элементами.
Для реализации потокового видео в MDX применяется сочетание
стандартного HTML-тега и кастомных
React-компонентов. Потоковое видео подразумевает передачу данных в
реальном времени без полной загрузки файла.
и его
атрибутыОсновной способ вставки видео:
Ключевые атрибуты:
controls — отображает стандартные элементы
управления.autoPlay — автоматическое воспроизведение при загрузке
страницы.muted — видео без звука по умолчанию.loop — повторное воспроизведение после завершения.src — путь к видео или потоковому файлу (например,
.m3u8 для HLS).Для потокового видео часто применяются форматы HLS (HTTP Live Streaming) и DASH (Dynamic Adaptive Streaming over HTTP). Они позволяют адаптировать качество видео под скорость соединения пользователя. Браузеры напрямую не всегда поддерживают HLS, поэтому для воспроизведения используют библиотеки вроде hls.js.
Пример интеграции HLS через React-компонент:
import { useEffect, useRef } from 'react'
import Hls from 'hls.js'
function HlsPlayer({ src }) {
const videoRef = useRef(null)
useEffect(() => {
let hls
if (Hls.isSupported()) {
hls = new Hls()
hls.loadSource(src)
hls.attachMedia(videoRef.current)
} else if (videoRef.current.canPlayType('application/vnd.apple.mpegurl')) {
videoRef.current.src = src
}
return () => hls && hls.destroy()
}, [src])
return
}
MDX позволяет создавать компоненты с полным контролем за видео:
onPlay, onPause,
onEnded).Пример:
function CustomPlayer({ src }) {
const videoRef = useRef(null)
const playVideo = () => videoRef.current.play()
const pauseVideo = () => videoRef.current.pause()
return (
<>
>
)
}
preload="metadata" для ускорения старта
воспроизведения.MDX позволяет сочетать видео с текстом, графикой и другими React-компонентами:
Описание текущего видео и ключевые моменты урока.
Компоненты могут передавать данные между собой, хранить состояние и реагировать на пользовательские действия, создавая полноценный учебный интерфейс.
Можно реализовать динамическую подстановку источника видео через пропсы:
function DynamicVideo({ id }) {
const videoSrc = `/video/${id}.mp4`
return
}
Это упрощает организацию больших видео-библиотек и интеграцию с системами управления контентом.