Для работы с Toastify в Svelte первым шагом является установка библиотеки через npm:
npm install toastify-js
После установки необходимо импортировать CSS и JS компоненты Toastify
в нужный Svelte-компонент или в главный файл приложения
(App.svelte или main.js):
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
Импорт CSS обеспечивает корректное отображение всплывающих уведомлений и их анимаций.
Для отображения простого уведомления достаточно вызвать метод
Toastify с минимальным набором параметров:
Toastify({
text: "Привет! Это уведомление",
duration: 3000,
}).showToast();
Ключевые параметры:
text – текст сообщения, обязательный параметр.duration – время отображения в миллисекундах. Значение
-1 оставит уведомление до закрытия пользователем.close – добавляет кнопку закрытия, true
или false.gravity – вертикальное положение: "top"
или "bottom".position – горизонтальное положение:
"left", "center" или
"right".style – объект со стилями CSS для кастомизации
уведомления.className – добавление кастомного CSS-класса.Пример уведомления с кастомными стилями и кнопкой закрытия:
Toastify({
text: "Успешная операция",
duration: 4000,
close: true,
gravity: "top",
position: "right",
style: {
background: "linear-gradient(to right, #00b09b, #96c93d)",
color: "#fff",
fontWeight: "bold"
},
}).showToast();
В Svelte удобно использовать Toastify вместе с реактивными переменными и событиями. Например, при нажатии кнопки:
<script>
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
function notifySuccess() {
Toastify({
text: "Данные успешно сохранены",
duration: 3000,
gravity: "top",
position: "center",
close: true,
style: {
background: "#28a745",
},
}).showToast();
}
</script>
<button on:click={notifySuccess}>
Сохранить
</button>
В данном примере уведомление вызывается непосредственно при событии
click, что полностью соответствует реактивной природе
Svelte.
В реальных проектах часто требуется показывать уведомления на основе состояния или асинхронных операций. Для этого удобно создавать функцию-обёртку:
<script>
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
function showToast(message, type = "info") {
const colors = {
info: "#3498db",
success: "#2ecc71",
warning: "#f1c40f",
error: "#e74c3c"
};
Toastify({
text: message,
duration: 3500,
close: true,
gravity: "top",
position: "right",
style: {
background: colors[type] || colors.info,
},
}).showToast();
}
async function fetchData() {
try {
const response = await fetch("/api/data");
if (!response.ok) throw new Error("Ошибка загрузки");
showToast("Данные загружены успешно", "success");
} catch (err) {
showToast(err.message, "error");
}
}
</script>
<button on:click={fetchData}>
Загрузить данные
</button>
Такой подход позволяет централизованно управлять уведомлениями и легко изменять их стиль и поведение.
Использование HTML-контента и иконок:
Toastify позволяет вставлять HTML в уведомление через параметр
node:
const node = document.createElement("div");
node.innerHTML = '<strong>Внимание!</strong> <em>Произошла ошибка</em>';
Toastify({
node: node,
duration: 5000,
close: true,
gravity: "top",
position: "center",
}).showToast();
Последовательные уведомления:
Для отображения нескольких сообщений по очереди можно создавать массив уведомлений и использовать цикл:
const messages = ["Загрузка данных...", "Обработка...", "Готово!"];
messages.forEach((msg, i) => {
setTimeout(() => {
Toastify({ text: msg, duration: 2000, gravity: "top", position: "right" }).showToast();
}, i * 2200);
});
Toastify поддерживает собственные CSS-анимации через класс
className и позволяет подписываться на закрытие
уведомления:
Toastify({
text: "Закрываем через 3 секунды",
duration: 3000,
close: true,
gravity: "bottom",
position: "left",
className: "custom-toast",
callback: () => console.log("Уведомление закрыто")
}).showToast();
В Svelte можно использовать это для синхронизации состояния компонента с уведомлениями.
В крупных Svelte-приложениях имеет смысл создать отдельный компонент для уведомлений:
<script context="module">
import Toastify from "toastify-js";
import "toastify-js/src/toastify.css";
export function toast(message, type = "info") {
const colors = { info: "#3498db", success: "#2ecc71", warning: "#f1c40f", error: "#e74c3c" };
Toastify({
text: message,
duration: 3000,
gravity: "top",
position: "right",
close: true,
style: { background: colors[type] || colors.info }
}).showToast();
}
</script>
Теперь toast можно импортировать в любом компоненте и
использовать централизованно, что упрощает поддержку и изменение
визуальной темы уведомлений.
Эта методика позволяет использовать Toastify максимально эффективно в Svelte, сочетая легковесность библиотеки с реактивной архитектурой компонентов.