Компонент Checkbox в Chakra UI предназначен для создания интерактивных флажков в интерфейсе. Он полностью управляемый, поддерживает стилизацию через систему тем и предоставляет удобный API для интеграции с формами. Основной импорт выглядит следующим образом:
import { Checkbox } from "@chakra-ui/react";
Базовый пример использования:
<Checkbox>Принять условия</Checkbox>
По умолчанию Checkbox создаёт управляемый элемент
формы с состояниями checked и unchecked. Можно
использовать свойство isDisabled для блокировки выбора:
<Checkbox isDisabled>Невозможно выбрать</Checkbox>
Checkbox может работать как управляемый компонент через состояние React:
import { useState } from "react";
import { Checkbox } from "@chakra-ui/react";
function ControlledCheckbox() {
const [checked, setChecked] = useState(false);
return (
<Checkbox isChecked={checked} onCha nge={(e) => setChecked(e.target.checked)}>
Подписка на новости
</Checkbox>
);
}
Для неуправляемого варианта используется свойство
defaultChecked:
<Checkbox defaultChecked>Автообновление включено</Checkbox>
Ключевой момент: isChecked делает
компонент управляемым, а defaultChecked — задаёт начальное
состояние без последующего контроля.
Chakra UI позволяет изменять внешний вид через свойства компонента и систему темы:
<Checkbox colorScheme="green" size="lg">
Согласен с политикой
</Checkbox>
colorScheme определяет цвет флажка при выборе
(blue, red, green,
teal и другие).size задаёт размер: sm, md,
lg.Для кастомизации через CSS используется sx или
chakra:
<Checkbox
sx={{
borderRadius: "md",
borderColor: "purple.500",
_checked: {
bg: "purple.500",
borderColor: "purple.500",
},
}}
>
Кастомный чекбокс
</Checkbox>
Компонент CheckboxGroup позволяет объединять несколько чекбоксов с единым управлением состоянием:
import { Checkbox, CheckboxGroup, Stack } from "@chakra-ui/react";
<CheckboxGroup colorScheme="blue" defaultValue={['react']}>
<Stack spacing={4} direction="column">
<Checkbox value="react">React</Checkbox>
<Checkbox value="vue">Vue</Checkbox>
<Checkbox value="angular">Angular</Checkbox>
</Stack>
</CheckboxGroup>
Особенности CheckboxGroup:
defaultValue задаёт изначально выбранные значения.onChange возвращает массив выбранных значений.colorScheme и
size от группы.Пример с обработкой событий:
<CheckboxGroup
colorScheme="teal"
value={selectedValues}
onCha nge={setSelectedValues}
>
<Stack>
<Checkbox value="html">HTML</Checkbox>
<Checkbox value="css">CSS</Checkbox>
<Checkbox value="js">JavaScript</Checkbox>
</Stack>
</CheckboxGroup>
Для сценариев с частичным выбором (например, “выбрать все”)
используется свойство isIndeterminate:
<Checkbox isIndeterminate>Выбрать все файлы</Checkbox>
Применение в группе:
function SelectAllExample() {
const [checkedItems, setCheckedItems] = useState([false, false, false]);
const allChecked = checkedItems.every(Boolean);
const isIndeterminate = checkedItems.some(Boolean) && !allChecked;
return (
<>
<Checkbox
isChecked={allChecked}
isIndeterminate={isIndeterminate}
onCha nge={(e) =>
setCheckedItems([e.target.checked, e.target.checked, e.target.checked])
}
>
Выбрать все
</Checkbox>
<Stack pl={6} mt={1}>
<Checkbox
isChecked={checkedItems[0]}
onCha nge={(e) =>
setCheckedItems([e.target.checked, checkedItems[1], checkedItems[2]])
}
>
Файл 1
</Checkbox>
<Checkbox
isChecked={checkedItems[1]}
onCha nge={(e) =>
setCheckedItems([checkedItems[0], e.target.checked, checkedItems[2]])
}
>
Файл 2
</Checkbox>
<Checkbox
isChecked={checkedItems[2]}
onCha nge={(e) =>
setCheckedItems([checkedItems[0], checkedItems[1], e.target.checked])
}
>
Файл 3
</Checkbox>
</Stack>
</>
);
}
isDisabled — делает чекбокс недоступным.isReadOnly — запрещает изменение, но оставляет
возможность фокусировки.isInvalid — визуально подчёркивает ошибочное
состояние.Пример:
<Checkbox isDisabled>Невозможно выбрать</Checkbox>
<Checkbox isReadOnly>Только для чтения</Checkbox>
<Checkbox isInvalid>Ошибка выбора</Checkbox>
Chakra UI совместим с React Hook Form или другими библиотеками форм. Пример с React Hook Form:
import { useForm, Controller } from "react-hook-form";
import { Checkbox } from "@chakra-ui/react";
function FormExample() {
const { control, handleSubmit } = useForm({
defaultValues: { agree: false },
});
const onSub mit = (data) => console.log(data);
return (
<form onSub mit={handleSubmit(onSubmit)}>
<Controller
name="agree"
control={control}
render={({ field }) => <Checkbox {...field}>Согласие</Checkbox>}
/>
<button type="submit">Отправить</button>
</form>
);
}
Преимущество: полная синхронизация состояния чекбокса с формой без дополнительного кода для управления состоянием.
Chakra UI автоматически добавляет плавные анимации для состояний
checked, hover и focus. Для более
тонкой настройки можно использовать псевдоклассы:
<Checkbox
_hover={{ bg: "gray.100" }}
_focus={{ boxShadow: "outline" }}
_checked={{ bg: "blue.500", color: "white" }}
>
Анимация и ховер
</Checkbox>
| Свойство | Описание |
|---|---|
isChecked |
Управляемое состояние выбранности |
defaultChecked |
Начальное состояние для неуправляемого компонента |
isDisabled |
Отключает взаимодействие |
isReadOnly |
Только чтение, нельзя изменить |
isInvalid |
Отображение состояния ошибки |
isIndeterminate |
Частично выбранное состояние |
colorScheme |
Цветовая схема для чекбокса |
size |
Размер: sm, md, lg |
onChange |
Обработчик изменения состояния |
Chакра UI делает Checkbox гибким, стилизуемым и легко интегрируемым в сложные формы и интерфейсы, позволяя создавать как простые флажки, так и группы с управлением и частичными выборами.