В Chakra UI Toast — это временное уведомление, которое отображается поверх интерфейса, информируя пользователя о действиях, ошибках, успехах или предупреждениях. Toast уведомления не требуют ручного закрытия пользователем и автоматически исчезают через заданный промежуток времени.
Для работы с Toast необходимо использовать хук
useToast, который возвращает функцию для
вызова уведомлений.
import { useToast, Button } from "@chakra-ui/react";
function Example() {
const toast = useToast();
return (
<Button
onCl ick={() =>
toast({
title: "Действие выполнено",
description: "Ваши изменения были успешно сохранены.",
status: "success",
duration: 5000,
isClosable: true,
})
}
>
Показать уведомление
</Button>
);
}
title — основной заголовок
уведомления.description — дополнительное
описание.status — тип уведомления:
"success", "error", "warning",
"info".duration — время отображения в
миллисекундах. Если не указано, используется значение по умолчанию (5000
мс).isClosable — возможность закрытия
уведомления пользователем вручную.По умолчанию уведомления появляются в правом верхнем углу. Позицию
можно изменить с помощью свойства
position:
toast({
title: "Информация",
status: "info",
position: "bottom-left",
});
Возможные значения position:
"top""top-right""top-left""bottom""bottom-right""bottom-left"Это позволяет гибко интегрировать уведомления, не перекрывая ключевые элементы интерфейса.
Свойство duration контролирует, как
долго уведомление будет отображаться. Для создания постоянного
уведомления без автоматического скрытия нужно указать
null:
toast({
title: "Внимание",
description: "Это уведомление не закроется автоматически.",
status: "warning",
duration: null,
isClosable: true,
});
При необходимости программного закрытия можно использовать функцию
toast.closeAll(), которая закрывает все
активные уведомления:
<Button onCl ick={() => toast.closeAll()}>Закрыть все уведомления</Button>
Chakra UI предоставляет четыре стандартных статуса, каждый из которых имеет уникальный цвет и иконку:
success — зелёный, подтверждает
успешное действие.error — красный, указывает на
ошибку.warning — жёлтый, предупреждение о
потенциальной проблеме.info — синий, нейтральная
информация.Для более тонкой кастомизации можно использовать
variant:
toast({
title: "Кастомное уведомление",
status: "info",
variant: "subtle", // другие варианты: "solid", "left-accent", "top-accent"
});
subtle — лёгкий фон, подходит для
ненавязчивых уведомлений.solid — яркий фон, акцентирует
внимание.left-accent — цветная полоска слева,
привлекает внимание, но оставляет контент визуально лёгким.top-accent — цветная полоска сверху,
визуальный акцент с компактным стилем.Если требуется одновременно показывать несколько уведомлений, можно
передавать уникальный идентификатор с помощью
id. Это предотвращает дублирование:
toast({
id: "unique-toast-1",
title: "Уведомление",
status: "info",
});
Если уведомление с указанным id уже существует, новое не
создается, что позволяет избежать повторов при частых действиях
пользователя.
Toast уведомления часто используются вместе с асинхронными запросами для отображения статуса операции:
async function saveData() {
const toast = useToast();
try {
await api.saveItem(data);
toast({
title: "Сохранено успешно",
status: "success",
});
} catch (error) {
toast({
title: "Ошибка сохранения",
description: error.message,
status: "error",
});
}
}
Такой подход обеспечивает немедленную обратную связь для пользователя и делает интерфейс более отзывчивым.
Chakra UI поддерживает анимации появления и скрытия уведомлений.
Можно настраивать собственные компоненты внутри Toast с помощью свойства
render:
toast({
duration: 8000,
render: () => (
<Box color="white" p={3} bg="purple.500" borderRadius="md">
Кастомный контент уведомления
</Box>
),
});
Это позволяет полностью контролировать внешний вид и поведение уведомления, включая сложные интерактивные элементы.
status для визуального
различия уведомлений.isClosable: true и более длинный
duration.Эти принципы обеспечивают согласованность пользовательского опыта и поддерживают чистый и удобный интерфейс при использовании Chakra UI Toast.