MessageProvider — это системный компонент библиотеки
Naive UI, который обеспечивает централизованное управление уведомлениями
и сообщениями в приложении на Vue.js. Он позволяет создавать глобальные
и локальные уведомления с тонкой настройкой поведения и внешнего вида.
Важнейшей особенностью является способность к асинхронному управлению
множественными сообщениями и их очередностью.
Для использования MessageProvider необходимо
импортировать компонент и обернуть им корневой компонент приложения или
конкретный блок:
import { createApp } from 'vue';
import { create, NMessageProvider } from 'naive-ui';
import App from './App.vue';
const naive = create();
const app = createApp(App);
app.use(naive);
app.component('NMessageProvider', NMessageProvider);
app.mount('#app');
Ключевой момент: NMessageProvider
должен быть установлен на уровне компонента, где требуется управление
уведомлениями. Глобальная регистрация позволяет управлять сообщениями из
любого дочернего компонента, локальная — только внутри области.
В Naive UI сообщения создаются через инъекцию message
объекта. Он доступен при использовании useMessage:
import { useMessage } from 'naive-ui';
export default {
setup() {
const message = useMessage();
const showSuccess = () => {
message.success('Операция успешно выполнена');
};
return { showSuccess };
}
}
Основные типы сообщений:
info — информационные уведомленияsuccess — сообщения об успешном завершенииwarning — предупрежденияerror — ошибкиКаждое сообщение можно конфигурировать по длительности, позиции, стилю и возможности закрытия пользователем.
MessageProvider поддерживает глобальные и локальные
опции. Глобальные параметры задаются при инициализации:
<NMessageProvider :max="5" :duration="3000" :placement="'top-end'">
<App />
</NMessageProvider>
max — максимальное количество одновременно отображаемых
сообщенийduration — время отображения в миллисекундахplacement — позиция уведомлений (top,
bottom, top-end, bottom-start и
др.)Локальные опции можно передавать при создании конкретного сообщения:
message.info('Новое уведомление', { duration: 5000 });
MessageProvider поддерживает очередность сообщений. Если превышен
max, новые сообщения помещаются в очередь и показываются
после закрытия предыдущих. Для контроля очереди можно использовать
промисы:
const showSequential = async () => {
await message.info('Первое сообщение');
await message.success('Второе сообщение');
};
Это обеспечивает строгую последовательность отображения, полезную при цепочках уведомлений.
Каждое сообщение можно кастомизировать через слоты и пропсы:
message.info({
content: 'Сообщение с кнопкой',
closable: true,
action: h('button', { onClick: () => alert('Нажато') }, 'Действие')
});
Важные свойства для кастомизации:
content — текст или компонент сообщенияtype — тип уведомления (info,
success, warning, error)closable — отображение кнопки закрытияaction — компонент действия внутри уведомленияMessageProvider легко интегрируется с другими
контекстными провайдерами Naive UI, такими как
DialogProvider и NotificationProvider,
создавая единый интерфейс управления пользовательскими уведомлениями.
При этом сообщения могут наследовать темы и стили от родительского
провайдера, что облегчает поддержание консистентного UI.
max для избежания переполнения DOMMessageProvider является гибким и мощным инструментом
для управления уведомлениями в Naive UI, предоставляя тонкую настройку
поведения сообщений, их последовательности и внешнего вида. Он позволяет
централизованно контролировать UX уведомлений, обеспечивая
согласованность и удобство использования.