Компонент Editable предназначен для создания интерактивных полей текста, которые можно редактировать напрямую на странице. Он сочетает в себе контроль над отображением текста и удобный пользовательский интерфейс редактирования, упрощая реализацию inline-редактирования.
Базовое использование компонента выглядит следующим образом:
import { Editable, EditableInput, EditablePreview } from "@chakra-ui/react";
<Editable defaultValue="Пример текста">
<EditablePreview />
<EditableInput />
</Editable>
Свойство defaultValue задаёт начальное значение текста.
Для управления состоянием извне используется value и
onChange.
Компонент поддерживает два режима работы: контролируемый и неконтролируемый.
Неконтролируемый режим:
<Editable defaultValue="Неконтролируемый текст">
<EditablePreview />
<EditableInput />
</Editable>
В этом случае компонент сам хранит текущее значение.
Контролируемый режим:
const [text, setText] = useState("Контролируемый текст");
<Editable value={text} onCha nge={setText}>
<EditablePreview />
<EditableInput />
</Editable>
Использование контролируемого режима позволяет синхронизировать значение с внешним состоянием и интегрировать компонент с формами или глобальным состоянием приложения.
Пример с дополнительными свойствами:
<Editable
defaultValue="Редактируемый текст"
selectAllOnFocus={true}
submitOnBlur={true}
>
<EditablePreview />
<EditableInput />
</Editable>
Компонент предоставляет несколько событий для управления редактированием:
Пример использования:
<Editable
defaultValue="Текст для редактирования"
onE dit={() => console.log("Начало редактирования")}
onCan cel={() => console.log("Редактирование отменено")}
onSub mit={(val) => console.log("Сохранено значение:", val)}
>
<EditablePreview />
<EditableInput />
</Editable>
Chakra UI предоставляет возможность настраивать стили через стандартные пропсы и систему style props.
<Editable
defaultValue="Стилизация"
fontSize="lg"
color="teal.500"
bg="gray.100"
px={3}
py={2}
borderRadius="md"
>
<EditablePreview />
<EditableInput />
</Editable>
Можно также использовать focusBorderColor для управления
цветом границы при редактировании:
<Editable focusBorderColor="blue.400">
<EditablePreview />
<EditableInput />
</Editable>
Компонент поддерживает добавление кастомных кнопок для подтверждения или отмены изменений с помощью EditableControls:
import { Editable, EditableInput, EditablePreview, EditableControls, Button, HStack } from "@chakra-ui/react";
<Editable defaultValue="Текст с кнопками">
<EditablePreview />
<EditableInput />
<EditableControls>
{({ isEditing, onSubmit, onCancel }) =>
isEditing ? (
<HStack mt={2}>
<Button size="sm" colorScheme="green" onCl ick={onSubmit}>Сохранить</Button>
<Button size="sm" onCl ick={onCancel}>Отменить</Button>
</HStack>
) : null
}
</EditableControls>
</Editable>
Это позволяет создавать полноценный интерфейс редактирования с явными действиями пользователя.
По умолчанию Editable создаёт однострочное поле. Для многострочного
редактирования можно использовать свойство
isPreviewFocusable={false} и кастомный компонент, например
Textarea вместо EditableInput:
import { Textarea } from "@chakra-ui/react";
<Editable defaultValue="Многострочный текст">
<EditablePreview />
<Textarea as={EditableInput} rows={4} />
</Editable>
Editable полностью поддерживает стандартные требования доступности:
aria-label и aria-live для
скринридеров.Пример:
<Editable defaultValue="Доступный текст" aria-label="Редактируемое поле имени">
<EditablePreview />
<EditableInput />
</Editable>
selectAllOnFocus для удобного редактирования
коротких значений.EditableControls для
явного подтверждения или отмены.Textarea для многострочных редактируемых
блоков.aria атрибуты для
доступности.Эта функциональность делает Editable мощным инструментом для создания интерактивных интерфейсов с inline-редактированием текста, гибко настраиваемым как визуально, так и по поведению.