Компонент Select в Chakra UI представляет собой
стилизованный элемент выпадающего списка, аналог стандартного HTML
<select>, но с расширенными возможностями
кастомизации, интеграции с формами и поддержкой темизации. Он позволяет
выбирать одно значение из предопределённого списка опций и полностью
управляется через свойства React.
import { Sel ect } from "@chakra-ui/react";
<Sel ect placeholder="Выберите вариант">
<option value="option1">Вариант 1</option>
<option value="option2">Вариант 2</option>
<option value="option3">Вариант 3</option>
</Select>
Ключевые свойства:
placeholder — текст по умолчанию, отображается до
выбора значения.value — текущее выбранное значение, управляемое через
состояние React.onChange — функция-обработчик события изменения
значения.size — размеры компонента: "sm",
"md", "lg".variant — визуальный стиль: "outline",
"filled", "flushed",
"unstyled".isDisabled — блокировка компонента.isInvalid — пометка поля как ошибочного (например, для
валидации).Для контроля выбранного значения чаще всего используют хук
useState:
import { useState } fr om "react";
import { Sel ect } fr om "@chakra-ui/react";
function Example() {
const [value, setValue] = useState("");
return (
<Sel ect
placeholder="Выберите цвет"
value={value}
onCha nge={(e) => setValue(e.target.value)}
>
<option value="red">Красный</option>
<option value="green">Зелёный</option>
<option value="blue">Синий</option>
</Select>
);
}
Такой подход обеспечивает полное управление компонентом через состояние React, позволяя синхронизировать выбор пользователя с другими частями интерфейса.
Chakra UI поддерживает различные варианты оформления:
<Select variant="outline" placeholder="Outline" />
<Select variant="filled" placeholder="Filled" />
<Select variant="flushed" placeholder="Flushed" />
<Select variant="unstyled" placeholder="Unstyled" />
Каждый вариант имеет свои визуальные особенности. Outline — стандартная рамка, filled — заполненный фон, flushed — без верхней и боковой границы, unstyled — полностью без стилей, позволяя применять собственный CSS.
Свойство size управляет высотой и внутренними
отступами:
<Select size="sm" placeholder="Small" />
<Select size="md" placeholder="Medium" />
<Select size="lg" placeholder="Large" />
Компонент Select полностью совместим с библиотеками для работы с формами, такими как Formik и React Hook Form.
Пример использования с React Hook Form:
import { useForm, Controller } fr om "react-hook-form";
import { Sel ect } fr om "@chakra-ui/react";
function FormExample() {
const { control, handleSubmit } = useForm();
const onSub mit = (data) => console.log(data);
return (
<form onSub mit={handleSubmit(onSubmit)}>
<Controller
name="fruit"
control={control}
render={({ field }) => (
<Select {...field} placeholder="Выберите фрукт">
<option value="apple">Яблоко</option>
<option value="banana">Банан</option>
<option value="orange">Апельсин</option>
</Select>
)}
/>
<button type="submit">Отправить</button>
</form>
);
}
Использование Controller позволяет компоненту Select
работать как контролируемый элемент формы и корректно передавать данные
в объект формы.
Свойства isDisabled и isInvalid позволяют
управлять состоянием компонента без дополнительной логики:
<Select placeholder="Выберите язык" isDisabled>
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
</Select>
<Select placeholder="Выберите язык" isInvalid>
<option value="js">JavaScript</option>
<option value="ts">TypeScript</option>
</Select>
isDisabled блокирует выбор и делает компонент визуально
недоступным.isInvalid подсвечивает компонент как ошибочный, часто
используется при валидации данных формы.Chakra UI Select поддерживает группы опций через
стандартный HTML <optgroup>:
<Select placeholder="Выберите животное">
<optgroup label="Млекопитающие">
<option value="dog">Собака</option>
<option value="cat">Кошка</option>
</optgroup>
<optgroup label="Птицы">
<option value="eagle">Орёл</option>
<option value="parrot">Попугай</option>
</optgroup>
</Select>
Это улучшает читаемость длинных списков и обеспечивает логическую сегментацию данных.
Select полностью интегрируется с темами Chakra UI,
позволяя изменять цвета, шрифты и другие визуальные параметры через
объект theme:
import { extendTheme } fr om "@chakra-ui/react";
const theme = extendTheme({
components: {
Select: {
baseStyle: {
field: {
borderColor: "purple.500",
_hover: { borderColor: "purple.700" },
},
},
sizes: {
xl: { field: { fontSize: "xl", px: 4, py: 3 } },
},
variants: {
custom: {
field: { bg: "gray.100", borderRadius: "md" },
},
},
},
},
});
Такой подход позволяет создавать уникальные стилизованные Select-компоненты без повторения стилей в каждом элементе.
Select автоматически поддерживает базовые ARIA-атрибуты, такие как
aria-invalid при использовании isInvalid, что
обеспечивает корректное восприятие компонента для пользователей с
ограниченными возможностями.
Дополнительно можно использовать свойства aria-label и
aria-describedby для более сложных сценариев:
<Select aria-label="Выбор страны" placeholder="Выберите страну">
<option value="ru">Россия</option>
<option value="us">США</option>
</Select>
Это делает компонент совместимым с инструментами экранного чтения и соответствует стандартам WCAG.
Chakra UI Select сочетает простоту HTML <select> с
мощью React и стилями из Chakra UI, предоставляя гибкость управления
состоянием, визуальную кастомизацию и полную интеграцию с формами.
Использование вариантов, размеров, состояний и тем позволяет создавать
профессиональные интерфейсы без необходимости писать собственные стили с
нуля.