В библиотеке Naive UI уведомления реализуются через
компонент n-notification и соответствующий сервис
useNotification. Базовый вызов уведомления выглядит
следующим образом:
import { useNotification } from 'naive-ui'
const notification = useNotification()
notification.success({
title: 'Успешно',
content: 'Операция выполнена успешно'
})
Этот вызов создаёт стандартное уведомление с предопределённым стилем иконки и цвета фона. Для более гибкой кастомизации необходимо использовать дополнительные опции и возможности переопределения стилей.
Объект конфигурации уведомления поддерживает следующие ключевые параметры:
title — заголовок уведомления.content — основное содержимое.type — тип уведомления (success,
warning, error, info), влияющий
на цвет и иконку.duration — время показа уведомления в миллисекундах.
Значение 0 делает уведомление постоянным.closable — логическое значение, показывать ли кнопку
закрытия.onClose — коллбэк, вызываемый при закрытии
уведомления.onClick — обработчик клика по уведомлению.Эти параметры позволяют быстро настроить уведомление под стандартные требования интерфейса, однако для глубокой кастомизации потребуется работа с рендер-функциями и стилями.
Naive UI предоставляет возможность использовать JSX или функции render для генерации содержимого уведомления. Это позволяет добавлять сложные структуры, кнопки и интерактивные элементы.
Пример кастомного уведомления с кнопкой действия:
notification.info({
content: () => (
<div style="display: flex; flex-direction: column; gap: 8px;">
<span>Произошло обновление данных</span>
<button
onCl ick={() => console.log('Действие выполнено')}
style="padding: 4px 8px; background-color: #409EFF; color: white; border: none; border-radius: 4px;"
>
Применить
</button>
</div>
),
duration: 0,
closable: true
})
Использование рендер-функций позволяет вставлять любые компоненты Vue, кастомные кнопки, изображения и даже сложные интерактивные виджеты.
Для изменения внешнего вида уведомлений используется CSS-переменные и scoped CSS. Основные переменные, влияющие на уведомления:
--n-notification-font-size — размер шрифта.--n-notification-padding — внутренние отступы.--n-notification-border-radius — скругление углов.--n-notification-color-success,
--n-notification-color-error и т.д. — цвета фона по типу
уведомления.--n-notification-icon-color — цвет иконки.Пример переопределения стилей через style:
notification.warning({
title: 'Внимание',
content: 'Проверка данных не пройдена',
style: {
'--n-notification-font-size': '16px',
'--n-notification-color-warning': '#FFA500',
'--n-notification-border-radius': '12px'
}
})
Альтернативно можно использовать глобальные темы через объект
createTheme, чтобы настроить единый стиль всех
уведомлений приложения.
По умолчанию иконки зависят от типа уведомления. Для замены
используется параметр icon:
import { NIcon } from 'naive-ui'
import { CheckCircleOutline } from '@vicons/ionicons5'
notification.success({
title: 'Готово',
content: 'Данные успешно сохранены',
icon: () => <NIcon component={CheckCircleOutline} />
})
Можно использовать любые SVG-иконки, включая кастомные компоненты.
Naive UI поддерживает отображение нескольких уведомлений
одновременно. Для удобного управления группой уведомлений
используется placement:
notification.success({
title: 'Загрузка завершена',
content: 'Файлы сохранены',
placement: 'top-right'
})
notification.error({
title: 'Ошибка',
content: 'Не удалось сохранить изменения',
placement: 'top-right'
})
Параметр placement принимает значения:
'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'.
Группировка позволяет создавать более аккуратный и организованный
интерфейс уведомлений.
Для реализации сложной логики закрытия уведомления,
используется onClose:
notification.info({
title: 'Информация',
content: 'Вы уверены, что хотите продолжить?',
closable: true,
onClose: () => {
console.log('Пользователь закрыл уведомление')
}
})
Этот подход полезен для подтверждений, очистки состояния или синхронизации с внешними процессами.
Можно полностью переопределить шаблон уведомления через
notification с render:
notification.info({
render: () => (
<div style="display: flex; align-items: center; gap: 12px;">
<img src="/icons/info.svg" style="width: 24px; height: 24px;" />
<div>
<strong>Обновление доступно</strong>
<p>Нажмите, чтобы установить последнюю версию</p>
</div>
<button style="margin-left: auto;" onCl ick={() => console.log('Установка')}>
Установить
</button>
</div>
),
duration: 0
})
Такой подход позволяет полностью контролировать структуру, стили и интерактивность, превращая уведомления в полноценные виджеты интерфейса.
duration и onClose.placement для более чистого
UI.icon и render.Эти методы обеспечивают максимально гибкую кастомизацию уведомлений в Naive UI и позволяют адаптировать их под любой дизайн-проект.