Библиотека iziToast предоставляет мощные возможности для отображения уведомлений на веб-странице. В реальных приложениях часто возникает ситуация, когда одно и то же уведомление может быть вызвано несколько раз подряд. Без контроля дублирования это приводит к появлению множества одинаковых всплывающих окон, что ухудшает пользовательский опыт.
При стандартном вызове iziToast.show() каждый вызов
создаёт новое уведомление, независимо от того, идентично ли оно
предыдущему. Например:
iziToast.show({
title: 'Ошибка',
message: 'Невозможно сохранить данные'
});
iziToast.show({
title: 'Ошибка',
message: 'Невозможно сохранить данные'
});
Результатом будут два абсолютно одинаковых уведомления, появляющиеся одно за другим. В больших приложениях с асинхронными запросами это может происходить часто, создавая визуальный хаос.
Для предотвращения дублирования можно использовать свойство
id. Если уведомление с указанным id уже
существует, повторный вызов будет игнорироваться:
iziToast.show({
id: 'save-error',
title: 'Ошибка',
message: 'Невозможно сохранить данные',
position: 'topRight'
});
Повторный вызов с тем же id не создаст новое
уведомление:
iziToast.show({
id: 'save-error',
title: 'Ошибка',
message: 'Невозможно сохранить данные',
position: 'topRight'
});
Ключевой момент: id должен быть
уникальным для каждого типа уведомления, которое необходимо
контролировать. Это эффективный способ предотвратить множественные
появления одинаковых сообщений.
В случаях, когда требуется более сложная логика, можно проверять
наличие уведомления перед его созданием. iziToast предоставляет метод
getAll() для получения списка текущих уведомлений:
const notifications = iziToast.getAll();
const exists = notifications.some(n => n.id === 'save-error');
if (!exists) {
iziToast.show({
id: 'save-error',
title: 'Ошибка',
message: 'Невозможно сохранить данные',
position: 'topRight'
});
}
Этот подход позволяет динамически фильтровать повторные уведомления,
даже если id назначается программно или создаётся на основе
контента сообщения.
Для предотвращения дублирования можно использовать метод
destroy() или опцию timeout и
resetOnHover для автоматического управления временем жизни
уведомлений:
iziToast.show({
id: 'notification',
title: 'Информация',
message: 'Обновление данных прошло успешно',
timeout: 5000,
resetOnHover: true
});
timeout — задаёт время жизни уведомления в
миллисекундах.resetOnHover — продлевает время отображения при
наведении курсора, предотвращая преждевременное исчезновение.Если требуется полностью удалить старое уведомление перед созданием нового, можно вызвать:
iziToast.destroy('notification');
iziToast.show({
id: 'notification',
title: 'Информация',
message: 'Обновление данных прошло успешно',
});
Для часто повторяющихся уведомлений удобно создавать обёртки:
function showUniqueToast(id, title, message, type = 'info') {
if (!iziToast.getAll().some(n => n.id === id)) {
iziToast[type]({
id: id,
title: title,
message: message,
position: 'topRight'
});
}
}
// Пример использования
showUniqueToast('network-error', 'Ошибка сети', 'Сервер недоступен');
Такой подход централизует логику дублирования и упрощает поддержку кода.
Иногда достаточно проверять уникальность по тексту уведомления, а не
по id. Для этого можно использовать хеширование текста:
function hashMessage(title, message) {
return `${title}_${message}`;
}
const messageId = hashMessage('Ошибка', 'Невозможно сохранить данные');
if (!iziToast.getAll().some(n => n.id === messageId)) {
iziToast.show({
id: messageId,
title: 'Ошибка',
message: 'Невозможно сохранить данные'
});
}
Такой метод позволяет автоматически предотвращать одинаковые уведомления без явного указания уникальных идентификаторов.
id для уведомлений, которые могут
повторяться.timeout
и resetOnHover.getAll() и программные фильтры.Эти методы позволяют контролировать отображение уведомлений, предотвращать визуальный шум и обеспечивать аккуратный и понятный интерфейс пользователя при работе с iziToast.