В библиотеке MUI (Material-UI) для React-компонентов индикаторы
прогресса (Progress) реализуются через компонент
CircularProgress и LinearProgress. Основная
цель этих компонентов — визуально отображать завершенность какой-либо
операции. Ключевым аспектом является различие между
determinate и indeterminate режимами,
которые управляют поведением и визуализацией прогресса.
Determinate (определённый) режим используется, когда
известен точный процент выполнения операции. Это позволяет пользователю
видеть конкретный прогресс и оценивать, сколько осталось до завершения.
В MUI этот режим активируется свойством
variant="determinate".
Пример использования LinearProgress в determinate режиме:
import LinearProgress from '@mui/material/LinearProgress';
import { useState, useEffect } from 'react';
function DeterminateLinear() {
const [progress, setProgress] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setProgress((oldProgress) => {
if (oldProgress >= 100) {
return 100;
}
return oldProgress + 10;
});
}, 1000);
return () => clearInterval(timer);
}, []);
return <LinearProgress variant="determinate" value={progress} />;
}
Ключевые моменты determinate режима:
value, которое принимает число от
0 до 100.value отражает процент выполнения операции.CircularProgress в determinate режиме работает аналогично:
import CircularProgress from '@mui/material/CircularProgress';
<CircularProgress variant="determinate" value={50} />
value определяет заполнение круга.size и thickness для
кастомизации внешнего вида индикатора.Indeterminate (неопределённый) режим используется,
когда неизвестна продолжительность операции. В этом случае индикатор
отображает анимацию, сигнализируя, что процесс выполняется, но без
указания конкретного прогресса. В MUI он задается через
variant="indeterminate". Свойство value в этом
режиме не используется.
Пример LinearProgress в indeterminate режиме:
<LinearProgress variant="indeterminate" />
Пример CircularProgress в indeterminate режиме:
<CircularProgress />
(По умолчанию CircularProgress без указания
variant использует indeterminate режим.)
Особенности indeterminate режима:
classes и
стили, но значение value игнорируется.| Режим | Когда использовать | Свойства |
|---|---|---|
| Determinate | Когда известен прогресс (0–100%) | variant="determinate", value |
| Indeterminate | Когда прогресс неизвестен | variant="indeterminate" (Linear), default
(Circular) |
Дополнительные возможности кастомизации:
color="primary" | "secondary" | "inherit".size и
thickness для CircularProgress; высота и стили для
LinearProgress.sx.Пример кастомного CircularProgress:
<CircularProgress
variant="determinate"
value={75}
size={60}
thickness={5}
sx={{
color: 'green',
}}
/>
В реальных приложениях часто используют комбинацию режимов:
Это позволяет создавать интерфейсы, которые одновременно информативны и динамичны, улучшая пользовательский опыт.
Хотите, я могу отдельно подготовить подробный гайд по кастомизации анимаций и цветов для обоих режимов, чтобы можно было создавать уникальные индикаторы прогресса?