Chakra UI предоставляет гибкий и мощный инструмент для создания компонентов интерфейса, включая компоненты обратной связи, такие как Alert, Toast, Spinner, Progress, Skeleton и AlertDialog. Кастомизация этих компонентов позволяет не только изменить визуальное оформление, но и интегрировать их с общей системой стилей приложения, улучшая пользовательский опыт.
Все компоненты Chakra UI построены с использованием стилизации на основе темы. Основные возможности кастомизации включают:
colorScheme)
Большинство компонентов обратной связи поддерживают проп
colorScheme, который задаёт цветовую палитру для элемента в
зависимости от состояния. Например, для компонента
Alert:<Alert status="success" colorScheme="green">
Данные успешно сохранены!
</Alert>
С помощью colorScheme можно использовать стандартные
цвета темы или расширять их через кастомные значения в
extendTheme.
sx,
styleProps) Chakra UI поддерживает стандартные
свойства стилей, такие как bg, color,
borderRadius, boxShadow. Их можно задавать
напрямую в компоненте:<Alert status="error" bg="red.100" color="red.800" borderRadius="md">
Произошла ошибка при сохранении.
</Alert>
theme) Для глобальной
кастомизации компонентов обратной связи можно использовать функцию
extendTheme. Пример расширения компонента
Alert с добавлением нового варианта:import { extendTheme } from "@chakra-ui/react";
const theme = extendTheme({
components: {
Alert: {
variants: {
fancy: (props) => ({
container: {
bg: props.colorMode === "dark" ? "purple.700" : "purple.100",
borderLeft: "4px solid",
borderColor: "purple.500",
},
}),
},
},
},
});
export default theme;
Использование нового варианта:
<Alert variant="fancy">
Новая кастомная подсказка для пользователя.
</Alert>
ToastToast — динамический компонент уведомлений, который чаще
всего вызывается через хук useToast. Кастомизация
включает:
const toast = useToast();
toast({
title: "Сохранение прошло успешно",
description: "Данные обновлены в базе",
status: "success",
duration: 5000,
isClosable: true,
position: "top-right",
});
render:toast({
position: "bottom-left",
render: () => (
<Box bg="blue.500" color="white" p={4} borderRadius="md">
Кастомное уведомление
</Box>
),
});
Toast:const theme = extendTheme({
components: {
Toast: {
baseStyle: {
container: {
borderRadius: "xl",
boxShadow: "lg",
},
},
},
},
});
Для компонентов Spinner, Progress и
Skeleton важно управление состояниями и анимацией:
<Spinner
thickness="4px"
speed="0.65s"
emptyColor="gray.200"
color="blue.500"
size="xl"
/>
<Progress
value={60}
colorScheme="pink"
size="lg"
borderRadius="md"
/>
<Skeleton height="20px" width="200px" startColor="gray.100" endColor="gray.300" speed={1.5} />
AlertDialog используется для критических подтверждений
действий. Кастомизация включает стиль контейнера, кнопок и текстов:
<AlertDialog isOpen={isOpen} leastDestructiveRef={cancelRef} onCl ose={onClose}>
<AlertDialogOverlay>
<AlertDialogContent borderRadius="lg">
<AlertDialogHeader fontSize="lg" fontWeight="bold">
Удаление записи
</AlertDialogHeader>
<AlertDialogBody>
Вы уверены, что хотите удалить этот элемент? Это действие невозможно отменить.
</AlertDialogBody>
<AlertDialogFooter>
<Button ref={cancelRef} onCl ick={onClose}>
Отмена
</Button>
<Button colorScheme="red" onCl ick={onDelete} ml={3}>
Удалить
</Button>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialogOverlay>
</AlertDialog>
В теме можно задать глобальные стили для всех модальных предупреждений:
const theme = extendTheme({
components: {
AlertDialog: {
baseStyle: {
content: {
borderRadius: "2xl",
boxShadow: "xl",
},
header: {
fontWeight: "semibold",
},
body: {
fontSize: "md",
},
},
},
},
});
variant)
позволяют создавать повторно используемые стили для нескольких
компонентов.Эта стратегия позволяет создавать сложные, визуально согласованные и интерактивные компоненты обратной связи, полностью интегрированные в экосистему Chakra UI, без потери гибкости и производительности.