В библиотеке React Aria компоненты прогресса предоставляют мощные средства для отображения состояния загрузки или выполнения задачи. В основе лежат два основных типа индикаторов: определённый (determinate) и неопределённый (indeterminate) прогресс.
Определённый прогресс используется, когда известен процент выполнения задачи. Например, при загрузке файла можно отслеживать точное количество байт, уже загруженных по отношению к общему объёму.
Основные свойства компонента прогресса с определённым состоянием:
value – числовое значение текущего прогресса, обычно от
0 до 100.minValue – минимальное значение прогресса, по умолчанию
0.maxValue – максимальное значение, по умолчанию
100.label – описание цели или задачи, доступное для
скринридеров.orientation – ориентация полосы:
"horizontal" или "vertical".import { ProgressBar } from '@react-aria/progress';
function FileUploadProgress({ progress }) {
return (
<ProgressBar
value={progress}
minValue={0}
maxValue={100}
label="Загрузка файла"
orientation="horizontal"
/>
);
}
В этом примере value контролирует ширину полосы
прогресса и её доступность для пользователей с нарушениями зрения.
React Aria автоматически добавляет ARIA-атрибуты, такие
как aria-valuenow, aria-valuemin и
aria-valuemax.
Неопределённый прогресс используется, когда невозможно вычислить точный процент выполнения задачи. Типичный пример – ожидание ответа от сервера без информации о времени выполнения.
isIndeterminate – флаг, указывающий, что прогресс не
имеет определённого значения.label – описание задачи для скринридеров.orientation – горизонтальная или вертикальная
ориентация.import { ProgressBar } from '@react-aria/progress';
function LoadingIndicator() {
return (
<ProgressBar
isIndeterminate
label="Загрузка данных"
orientation="horizontal"
/>
);
}
При isIndeterminate полоска прогресса отображается
анимированно, показывая, что процесс выполняется, но точного значения
прогресса нет. ARIA-атрибуты, такие как aria-valuenow, не
задаются, но aria-busy может использоваться для обозначения
занятости элемента.
React Aria позволяет гибко управлять ориентацией полосы прогресса и её визуальным отображением.
<ProgressBar
value={75}
orientation="vertical"
label="Обработка данных"
/>
Визуальные стили полосы не определяются библиотекой – React Aria отвечает только за доступность и управление состоянием. Для стилизации следует использовать CSS или CSS-in-JS.
React Aria строится на принципах WAI-ARIA, что позволяет создавать полностью доступные компоненты прогресса:
role="progressbar" – задаёт семантический элемент.aria-valuenow – текущее значение (для определённого
прогресса).aria-valuemin и aria-valuemax –
минимальное и максимальное значение.aria-label или aria-labelledby – описание
цели задачи.aria-busy – флаг для неопределённого прогресса.Пример с ARIA:
<ProgressBar
value={50}
minValue={0}
maxValue={100}
label="Загрузка изображения"
/>
Для скринридеров это будет звучать как: «Загрузка изображения, прогресс 50%».
В некоторых интерфейсах полезно динамически переключать тип прогресса:
function DynamicProgress({ progress, isLoading }) {
return (
<ProgressBar
isIndeterminate={isLoading && progress === null}
value={progress ?? undefined}
minValue={0}
maxValue={100}
label="Обновление данных"
/>
);
}
Такой подход обеспечивает гибкость интерфейса и корректную доступность на всех этапах выполнения задачи.
React Aria обеспечивает унифицированный API для работы с прогрессом, позволяя создавать как простые, так и сложные интерфейсы с учётом доступности, а выбор между определённым и неопределённым прогрессом зависит исключительно от наличия информации о выполнении задачи.