LinearProgress — это компонент библиотеки MUI, предназначенный для отображения прогресса выполнения операции в виде линейной полосы. Он применяется для визуального информирования пользователей о состоянии загрузки или выполнения долгих операций.
Компонент импортируется из @mui/material:
import LinearProgress from '@mui/material/LinearProgress';
Базовый пример:
<LinearProgress />
В этом случае отображается индетерминированная полоска, которая движется бесконечно, показывая, что процесс выполняется, но точный процент неизвестен.
LinearProgress поддерживает два режима:
<LinearProgress />
value, принимающее число от 0 до 100.<LinearProgress variant="determinate" value={50} />
variant="determinate" активирует режим отображения
конкретного процента.value={число} задаёт текущий процент выполнения.LinearProgress можно настраивать с помощью свойств
color, sx и classes.
primary, secondary,
либо кастомные через sx.<LinearProgress color="secondary" />
<LinearProgress
sx={{
height: 10,
borderRadius: 5,
backgroundColor: 'lightgray',
'& .MuiLinearProgress-bar': {
backgroundColor: 'green',
},
}}
/>
Для indeterminate режима MUI автоматически добавляет анимацию. Для determinate можно обновлять значение через состояние:
import React, { useState, useEffect } from 'react';
import LinearProgress from '@mui/material/LinearProgress';
function ProgressExample() {
const [progress, setProgress] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
setProgress((oldProgress) => {
if (oldProgress >= 100) {
return 0;
}
return oldProgress + 10;
});
}, 500);
return () => {
clearInterval(timer);
};
}, []);
return <LinearProgress variant="determinate" value={progress} />;
}
Такой подход позволяет плавно отображать процесс выполнения операций.
LinearProgress часто используют вместе с кнопками, карточками или модальными окнами для отображения состояния загрузки:
import Button from '@mui/material/Button';
import LinearProgress from '@mui/material/LinearProgress';
import Box from '@mui/material/Box';
<Box sx={{ width: '100%' }}>
<Button variant="contained">Загрузить</Button>
<LinearProgress sx={{ mt: 2 }} />
</Box>
Использование в Box или Stack позволяет
легко управлять позиционированием и отступами.
sx={{ height: <число> }}.borderRadius.sx или color, чтобы сохранить
контрастность.LinearProgress поддерживает variant="buffer", который
позволяет отображать два значения:
value — текущий прогресс.valueBuffer — загруженное или подготовленное состояние,
которое визуально отличается от основного прогресса.<LinearProgress variant="buffer" value={50} valueBuffer={70} />
Полоса valueBuffer отображается как слегка прозрачный
фон, а value — как основной цвет. Это полезно для ситуаций
с кэшированием или предварительной загрузкой ресурсов.
LinearProgress — мощный инструмент для визуализации прогресса, легко интегрируемый с другими компонентами MUI и полностью настраиваемый через темы и CSS-in-JS.