Компонент Stat предназначен для
отображения числовых данных с контекстом, часто используемых в
дашбордах, аналитических панелях и интерфейсах мониторинга. Он
обеспечивает структурированное и визуально привлекательное представление
информации, состоящей из основного значения, метки и дополнительного
индикатора изменений.
StatКомпонент состоит из нескольких ключевых элементов:
StatLabel – текстовая метка,
поясняющая смысл числа.StatNumber – основное числовое
значение.StatHelpText – дополнительная
информация или контекст.StatArrow – стрелка для отображения
направления изменения значения (увеличение/уменьшение).Пример базовой структуры:
import { Stat, StatLabel, StatNumber, StatHelpText, StatArrow } from "@chakra-ui/react";
<Stat>
<StatLabel>Продажи</StatLabel>
<StatNumber>1,245</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> 23.4%
</StatHelpText>
</Stat>
В этом примере:
StatLabel показывает, что данные
относятся к продажам.StatNumber отображает текущее
значение.StatHelpText с
StatArrow визуализирует динамику: рост на
23.4%.Компонент StatArrow поддерживает два
типа:
type="increase" – стрелка вверх,
обозначает рост.type="decrease" – стрелка вниз,
обозначает снижение.Дополнительно можно использовать свойства цвета для подчеркивания динамики:
<StatArrow type="increase" color="green.500" />
<StatArrow type="decrease" color="red.500" />
Все текстовые элементы компонента можно настраивать через
Chakra UI пропсы, такие как fontSize,
color и fontWeight:
<Stat>
<StatLabel fontSize="sm" color="gray.500">Доход</StatLabel>
<StatNumber fontSize="2xl" fontWeight="bold">$8,420</StatNumber>
<StatHelpText fontSize="md" color="green.400">
<StatArrow type="increase" /> 12%
</StatHelpText>
</Stat>
Stat легко комбинируется с
SimpleGrid,
HStack или
VStack для отображения нескольких
показателей:
import { SimpleGrid, Stat, StatLabel, StatNumber, StatHelpText, StatArrow } from "@chakra-ui/react";
<SimpleGrid columns={3} spacing={5}>
<Stat>
<StatLabel>Пользователи</StatLabel>
<StatNumber>5,230</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> 8%
</StatHelpText>
</Stat>
<Stat>
<StatLabel>Заказы</StatLabel>
<StatNumber>1,120</StatNumber>
<StatHelpText>
<StatArrow type="decrease" /> 3%
</StatHelpText>
</Stat>
<Stat>
<StatLabel>Выручка</StatLabel>
<StatNumber>$12,450</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> 15%
</StatHelpText>
</Stat>
</SimpleGrid>
Использование SimpleGrid позволяет
равномерно распределять статистические блоки, создавая аккуратный и
читаемый интерфейс.
Компонент Stat наследует стили от
Box, что открывает возможности для
кастомизации:
bg,
border, borderRadius.p, m,
w, h.boxShadow,
transition, hover.Пример с визуальным оформлением:
<Stat bg="gray.50" p={4} borderRadius="md" boxShadow="md">
<StatLabel color="gray.600">Активные пользователи</StatLabel>
<StatNumber color="blue.600">3,420</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> 5.2%
</StatHelpText>
</Stat>
StatNumber и StatHelpText можно обновлять
через состояние React, что удобно для дашбордов с
живыми данными:
import { useState, useEffect } from "react";
import { Stat, StatLabel, StatNumber, StatHelpText, StatArrow } from "@chakra-ui/react";
function DynamicStat() {
const [sales, setSales] = useState(1245);
useEffect(() => {
const interval = setInterval(() => {
setSales(prev => prev + Math.floor(Math.random() * 50));
}, 3000);
return () => clearInterval(interval);
}, []);
return (
<Stat>
<StatLabel>Продажи</StatLabel>
<StatNumber>{sales}</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> {((sales / 1245 - 1) * 100).toFixed(1)}%
</StatHelpText>
</Stat>
);
}
Такой подход позволяет отображать обновляемую статистику без перезагрузки страницы.
Все элементы Stat полностью совместимы
с респонсивными пропсами Chakra UI:
<Stat>
<StatLabel fontSize={{ base: "sm", md: "md" }}>Доход</StatLabel>
<StatNumber fontSize={{ base: "xl", md: "2xl" }}>$8,420</StatNumber>
<StatHelpText fontSize={{ base: "sm", md: "md" }}>
<StatArrow type="increase" /> 12%
</StatHelpText>
</Stat>
Это позволяет автоматически подстраивать размеры текста под экраны разных устройств, сохраняя читабельность.
Для улучшения визуальной информативности к
StatLabel и
StatNumber можно добавлять иконки из
@chakra-ui/icons или сторонних
библиотек:
import { Stat, StatLabel, StatNumber, StatHelpText, StatArrow } from "@chakra-ui/react";
import { ArrowUpIcon } from "@chakra-ui/icons";
<Stat>
<StatLabel>Подписки</StatLabel>
<StatNumber>
2,350 <ArrowUpIcon color="green.400" />
</StatNumber>
<StatHelpText>
<StatArrow type="increase" /> 7.5%
</StatHelpText>
</Stat>
Компонент Stat в Chakra UI обеспечивает
гибкую и наглядную визуализацию числовых показателей, легко адаптируется
под дизайн, поддерживает динамическое обновление и полностью
интегрируется с остальными инструментами библиотеки для создания
профессиональных интерфейсов.