Stepper в Chakra UI представляет собой компонент, предназначенный для пошагового отображения прогресса пользователя в форме или процессе. Он позволяет визуализировать текущий этап, а также количество оставшихся шагов. Stepper особенно полезен в интерфейсах, где требуется последовательное выполнение действий, например, при заполнении многошаговых форм.
Для использования Stepper необходимо подключить соответствующие компоненты из Chakra UI:
import { Box, Stepper, Step, StepIndicator, StepStatus, StepTitle, StepDescription, StepSeparator } from "@chakra-ui/react";
Базовая структура Stepper включает:
Пример минимальной разметки:
<Stepper index={1} orientation="horizontal" size="md">
<Step>
<StepIndicator />
<StepTitle>Первый шаг</StepTitle>
<StepDescription>Описание первого шага</StepDescription>
<StepSeparator />
</Step>
<Step>
<StepIndicator />
<StepTitle>Второй шаг</StepTitle>
<StepDescription>Описание второго шага</StepDescription>
<StepSeparator />
</Step>
<Step>
<StepIndicator />
<StepTitle>Третий шаг</StepTitle>
<StepDescription>Описание третьего шага</StepDescription>
</Step>
</Stepper>
Ключевые свойства Stepper:
index – определяет текущий активный шаг (нумерация с
нуля).orientation – направление: horizontal или
vertical.size – размер индикаторов: sm,
md, lg.colorScheme – цветовая схема для активного шага.Каждый шаг может находиться в одном из трёх состояний:
<Step isCompleted={true}>
<StepIndicator />
<StepTitle>Первый шаг</StepTitle>
</Step>
<Step isActive={true}>
<StepIndicator />
<StepTitle>Второй шаг</StepTitle>
</Step>
<Step>
<StepIndicator />
<StepTitle>Третий шаг</StepTitle>
</Step>
Chakra UI автоматически применяет визуальные эффекты для этих состояний: активный шаг подсвечивается, завершённые шаги показывают галочку, неактивные – приглушены.
Горизонтальная ориентация идеально подходит для процессов с ограниченным количеством шагов и широкими экранами:
<Stepper index={1} orientation="horizontal">
{/* шаги */}
</Stepper>
Вертикальная ориентация удобна для мобильных интерфейсов и длинных списков шагов:
<Stepper index={0} orientation="vertical">
{/* шаги */}
</Stepper>
В вертикальном режиме StepSeparator растягивается по
высоте и соединяет шаги вертикально.
StepIndicator можно кастомизировать через:
colorScheme.size Stepper или отдельного
индикатора.<StepIndicator>
<CheckIcon />
</StepIndicator>
StepStatus позволяет явно указать состояние шага для более сложных кастомизаций:
<StepStatus>
{({ complete, active, incomplete }) => (
<Box>
{complete && "Завершено"}
{active && "Текущий"}
{incomplete && "Ожидание"}
</Box>
)}
</StepStatus>
Step можно рендерить динамически на основе массива объектов, что удобно для многошаговых форм с серверными данными:
const steps = [
{ title: "Личные данные", description: "Введите ваши имя и фамилию" },
{ title: "Контакты", description: "Введите email и телефон" },
{ title: "Подтверждение", description: "Проверьте введённые данные" },
];
<Stepper index={currentStep}>
{steps.map((step, idx) => (
<Step key={idx}>
<StepIndicator />
<StepTitle>{step.title}</StepTitle>
<StepDescription>{step.description}</StepDescription>
{idx < steps.length - 1 && <StepSeparator />}
</Step>
))}
</Stepper>
Состояние currentStep можно обновлять через кнопки
“Далее” и “Назад”, обеспечивая интерактивность.
Stepper часто используется совместно с react-hook-form
или другими библиотеками форм. Каждый шаг может быть отдельным
компонентом формы, а index Stepper синхронизируется с
состоянием формы:
const [stepIndex, setStepIndex] = useState(0);
const handleNext = () => setStepIndex(prev => prev + 1);
const handleBack = () => setStepIndex(prev => prev - 1);
<Stepper index={stepIndex}>
<Step>
<StepIndicator />
<StepTitle>Шаг 1</StepTitle>
<StepDescription>Данные пользователя</StepDescription>
</Step>
<Step>
<StepIndicator />
<StepTitle>Шаг 2</StepTitle>
<StepDescription>Адрес и контакты</StepDescription>
</Step>
</Stepper>
<Button onCl ick={handleBack} disabled={stepIndex === 0}>Назад</Button>
<Button onCl ick={handleNext} disabled={stepIndex === steps.length - 1}>Далее</Button>
Chakra UI обеспечивает полную кастомизацию Stepper:
colorScheme и системные
цвета Chakra.size.theme.Пример кастомного стиля:
<Stepper index={1} colorScheme="teal" size="lg">
<Step>
<StepIndicator />
<StepTitle>Регистрация</StepTitle>
<StepDescription>Введите учетные данные</StepDescription>
<StepSeparator />
</Step>
<Step>
<StepIndicator />
<StepTitle>Платеж</StepTitle>
<StepDescription>Выберите способ оплаты</StepDescription>
</Step>
</Stepper>
Цвет активного шага изменится на teal, индикаторы будут
крупнее, а StepSeparator автоматически подстроится под размер.
Stepper в Chakra UI обеспечивает гибкость, визуальную выразительность и удобство интеграции с интерактивными формами и интерфейсами, делая его незаменимым инструментом при создании пошаговых процессов.