Компонент Input в Chakra UI предназначен для работы
с текстовыми полями формы. Он является расширяемым и стилизуемым
компонентом, который поддерживает все стандартные HTML-атрибуты
<input>, а также предоставляет дополнительные
возможности для быстрого создания интерфейсов с единым стилем.
Простейший пример использования:
import { Input } from "@chakra-ui/react";
function Example() {
return <Input placeholder="Введите текст" />;
}
Здесь создается обычное текстовое поле с плейсхолдером. Компонент автоматически наследует темы Chakra UI, включая цвета, отступы и шрифты.
Chakra UI поддерживает различные типы input через стандартный атрибут
type:
text – обычный текст.email – для ввода email с базовой валидацией.password – скрытый текст для паролей.number – числовой ввод с возможностью задать
min, max и step.url, tel, search –
специализированные типы для различных сценариев.Пример:
<Input type="email" placeholder="example@email.com" />
<Input type="password" placeholder="Введите пароль" />
<Input type="number" min={0} max={100} step={5} />
Input можно использовать как управляемый или неуправляемый компонент:
Управляемый Input:
import { useState } from "react";
import { Input } from "@chakra-ui/react";
function ControlledInput() {
const [value, setValue] = useState("");
return (
<Input
value={value}
onCha nge={(e) => setValue(e.target.value)}
placeholder="Управляемый Input"
/>
);
}
Неуправляемый Input:
import { Input } from "@chakra-ui/react";
function UncontrolledInput() {
return <Input defaultValue="Неуправляемый Input" />;
}
Управляемые поля дают полный контроль над состоянием и позволяют легко интегрировать в формы с валидацией, тогда как неуправляемые подходят для простых сценариев.
Chakra UI позволяет настраивать размеры, цвета, границы и тени через пропсы:
size – sm, md,
lg.variant – outline, filled,
flushed, unstyled.focusBorderColor – цвет границы при фокусе.errorBorderColor – цвет границы при ошибке.Пример:
<Input
size="lg"
variant="filled"
placeholder="Стилизация Input"
focusBorderColor="teal.400"
errorBorderColor="red.500"
/>
Важные моменты:
size изменяет высоту поля и размер шрифта.variant полностью меняет визуальный стиль поля.Для создания полей с иконками или текстом можно использовать компонент InputGroup вместе с InputLeftElement и InputRightElement:
import { Input, InputGroup, InputLeftElement, InputRightElement, Icon } from "@chakra-ui/react";
import { EmailIcon, ViewIcon } from "@chakra-ui/icons";
<InputGroup>
<InputLeftElement pointerEvents="none">
<EmailIcon color="gray.300" />
</InputLeftElement>
<Input placeholder="Email" />
</InputGroup>
<InputGroup size="md">
<Input type="password" placeholder="Пароль" />
<InputRightElement width="4.5rem">
<Icon as={ViewIcon} />
</InputRightElement>
</InputGroup>
Особенности:
pointerEvents="none" используется, чтобы элемент слева
не мешал клику по полю.InputRightElement может быть интерактивным, например,
кнопкой для отображения пароля.Chakra UI интегрируется с компонентом FormControl, что позволяет легко отображать ошибки и состояния:
import { FormControl, FormLabel, FormErrorMessage, Input } from "@chakra-ui/react";
<FormControl isInvalid={true}>
<FormLabel>Имя пользователя</FormLabel>
<Input placeholder="Введите имя" />
<FormErrorMessage>Имя обязательно</FormErrorMessage>
</FormControl>
Принципы работы:
isInvalid активирует отображение ошибки.FormErrorMessage автоматически применяет стили темы для
ошибки.isRequired для
указания обязательного поля.Chakra UI позволяет управлять фокусом через рефы:
import { useRef } from "react";
import { Input, Button } from "@chakra-ui/react";
function FocusInput() {
const inputRef = useRef(null);
return (
<>
<Input ref={inputRef} placeholder="Клик по кнопке для фокуса" />
<Button onCl ick={() => inputRef.current.focus()}>Фокус</Button>
</>
);
}
Это полезно для динамических форм и интерфейсов с автокомплитом.
Для многострочного текста используется компонент Textarea, который наследует большинство свойств Input:
import { Textarea } from "@chakra-ui/react";
<Textarea placeholder="Введите многострочный текст" size="lg" />
size, variant,
focusBorderColor и errorBorderColor.Эта структура позволяет создавать гибкие и адаптивные формы, полностью интегрированные с темой Chakra UI и обеспечивающие удобный UX.