CircularProgress — это компонент Chakra UI, предназначенный для отображения прогресса в круговой форме. Он особенно полезен для визуализации процентного завершения операций, загрузок или других процессов, где важно показать прогресс пользователю в компактной и наглядной форме.
Компонент можно использовать как статически, так и динамически, с возможностью анимации изменения значения. Основная структура выглядит так:
import { CircularProgress, CircularProgressLabel } from "@chakra-ui/react";
<CircularProgress value={50} size="120px" thickness="8px" color="green.400">
<CircularProgressLabel>50%</CircularProgressLabel>
</CircularProgress>
"lg").CircularProgressLabel позволяет встроить текст прямо в
центр круга, что удобно для отображения процентов или других метрик.
Прогресс можно обновлять динамически, используя состояние React. Например, для имитации процесса загрузки:
import { useState, useEffect } from "react";
import { CircularProgress, CircularProgressLabel } from "@chakra-ui/react";
function DynamicProgress() {
const [progress, setProgress] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setProgress((prev) => (prev >= 100 ? 0 : prev + 10));
}, 1000);
return () => clearInterval(interval);
}, []);
return (
<CircularProgress value={progress} color="blue.500" size="100px">
<CircularProgressLabel>{progress}%</CircularProgressLabel>
</CircularProgress>
);
}
Chakra UI предоставляет гибкие возможности для кастомизации:
Пример с кастомизацией:
<CircularProgress
value={75}
size="120px"
thickness="12px"
color="pink.400"
trackColor="gray.100"
capIsRound
>
<CircularProgressLabel>75%</CircularProgressLabel>
</CircularProgress>
trackColor="gray.100" создаёт мягкий контраст между
заполненной и незаполненной частью.capIsRound добавляет плавные, округлые концы линии, что
визуально улучшает вид.CircularProgress поддерживает плавное изменение значения с помощью CSS-переходов. Для более сложной анимации можно использовать Chakra UI motion компоненты или библиотеку framer-motion.
Пример плавного увеличения значения:
import { motion } from "framer-motion";
import { CircularProgress, CircularProgressLabel } from "@chakra-ui/react";
const MotionCircularProgress = motion(CircularProgress);
function AnimatedProgress({ value }) {
return (
<MotionCircularProgress
value={value}
size="100px"
color="teal.400"
thickness="10px"
animate={{ value }}
transition={{ duration: 0.5 }}
>
<CircularProgressLabel>{value}%</CircularProgressLabel>
</MotionCircularProgress>
);
}
motion позволяет анимировать не только
прогресс, но и другие свойства, включая цвет и толщину.transition контролирует скорость и тип анимации.CircularProgress удобно использовать для:
Пример интеграции с текстовым описанием процесса:
<Box textAlign="center">
<CircularProgress value={60} color="orange.400" size="120px" thickness="10px">
<CircularProgressLabel>60%</CircularProgressLabel>
</CircularProgress>
<Text mt={2} fontSize="lg" color="gray.600">
Обработка данных
</Text>
</Box>
Box и Text позволяет создавать
полноценные информативные виджеты с визуальным прогрессом и
пояснением.Chakra UI CircularProgress сочетает в себе простоту использования и гибкость:
Благодаря этим возможностям, CircularProgress подходит для создания как минималистичных индикаторов, так и сложных визуальных панелей прогресса.