Textarea в Chakra UI представляет собой расширяемый
компонент для ввода многострочного текста. Он сочетает в себе гибкость
стандартного HTML <textarea> с преимуществами системы
стилизации Chakra UI, включая поддержку тем, адаптивность и простую
интеграцию с формами.
Базовый импорт и использование:
import { Textarea } from "@chakra-ui/react";
function App() {
return (
<Textarea placeholder="Введите текст..." />
);
}
Ключевые свойства:
placeholder — отображаемый
текст-заполнитель, когда поле пустое.value и
onChange — управление состоянием через
контролируемый компонент.size — размеры: "sm",
"md", "lg".resize — контроль возможности
изменения размеров пользователем: "none",
"both", "horizontal",
"vertical".isDisabled и
isReadOnly — запрет ввода или полное
отключение поля.focusBorderColor — цвет рамки при
фокусе, интегрированный с темой Chakra UI.Пример с контролируемым состоянием:
import { useState } from "react";
import { Textarea } from "@chakra-ui/react";
function ControlledTextarea() {
const [text, setText] = useState("");
return (
<Textarea
value={text}
onCha nge={(e) => setText(e.target.value)}
placeholder="Введите текст..."
size="md"
resize="vertical"
/>
);
}
Chakra UI позволяет использовать тему для единого оформления всех текстовых областей. Можно менять цвета, шрифты, отступы и бордеры через пропсы или кастомизировать тему:
<Textarea
placeholder="Введите комментарий..."
size="lg"
borderColor="gray.300"
focusBorderColor="blue.500"
bg="gray.50"
color="black"
/>
Также доступна адаптивная стилизация через массивы и объектные синтаксисы:
<Textarea
placeholder="Адаптивная Textarea"
size={["sm", "md", "lg"]} // sm на мобильных, md на планшетах, lg на десктопе
bg={{ base: "gray.100", md: "white" }}
/>
Для автоматического увеличения высоты по мере ввода текста
используется свойство minHeight, а для
ограничения высоты — maxHeight. Кроме
того, можно использовать библиотеку
react-textarea-autosize, интегрируя её с Chakra UI:
import TextareaAutosize from 'react-textarea-autosize';
import { chakra } from "@chakra-ui/react";
const ChakraTextareaAutosize = chakra(TextareaAutosize);
<ChakraTextareaAutosize
minRows={3}
maxRows={10}
placeholder="Введите длинный текст..."
/>
Textarea отлично работает с библиотеками управления
формами, такими как react-hook-form и formik.
Для валидации можно использовать isInvalid и
FormErrorMessage:
import { FormControl, FormLabel, FormErrorMessage, Textarea } from "@chakra-ui/react";
import { useForm } from "react-hook-form";
function CommentForm() {
const { register, handleSubmit, formState: { errors } } = useForm();
return (
<form onSub mit={handleSubmit(data => console.log(data))}>
<FormControl isInvalid={errors.comment}>
<FormLabel>Комментарий</FormLabel>
<Textarea {...register("comment", { required: "Комментарий обязателен" })} />
<FormErrorMessage>{errors.comment && errors.comment.message}</FormErrorMessage>
</FormControl>
</form>
);
}
Textarea поддерживает стандартные события DOM:
onFocus — срабатывает при получении
фокуса.onBlur — при потере фокуса.onKeyDown,
onKeyUp,
onInput — для отслеживания ввода.Пример:
<Textarea
placeholder="Нажмите Enter для отправки"
onKeyD own={(e) => {
if (e.key === "Enter") {
console.log("Enter нажата");
e.preventDefault();
}
}}
/>
Chakra UI автоматически заботится о доступности. Textarea поддерживает:
aria-label,
aria-describedby)Добавление aria-label улучшает доступность для
скринридеров:
<Textarea aria-label="Комментарий" placeholder="Введите текст..." />
Textarea в Chakra UI — это мощный, гибкий и полностью настраиваемый компонент. Он сочетает привычный HTML API с преимуществами реактивной стилизации, поддержкой тем, адаптивностью и интеграцией с формами. Используя его свойства и возможности темы, можно создать как простой текстовый ввод, так и сложный контролируемый редактор с автозаменой, валидацией и кастомной логикой обработки событий.