Библиотека Naive UI предоставляет богатый набор UI-компонентов для Vue 3, которые можно использовать модульно. Это позволяет подключать только необходимые элементы, уменьшая размер бандла и улучшая производительность приложения.
Naive UI поддерживает два основных способа импорта компонентов:
Глобальный импорт через плагин Все компоненты подключаются единожды и становятся доступными во всем приложении.
import { createApp } from 'vue'
import App from './App.vue'
import naive from 'naive-ui'
const app = createApp(App)
app.use(naive)
app.mount('#app')
При таком подходе все компоненты Naive UI регистрируются глобально. Это удобно для быстрого прототипирования, но может привести к увеличению размера финального бандла, так как включаются все компоненты библиотеки.
Локальный импорт отдельных компонентов Оптимальный способ для production-приложений, где важен размер бандла.
import { NButton, NInput } from 'naive-ui'
export default {
components: {
NButton,
NInput
}
}
В этом случае в проект попадут только те компоненты, которые действительно используются.
Для проектов на TypeScript Naive UI предоставляет полную типизацию компонентов. Импорт компонентов и их использование остаются идентичными, но добавляется возможность типизации пропсов и событий:
import { NButton } from 'naive-ui'
export default {
components: {
NButton
},
methods: {
handleClick(): void {
console.log('Button clicked')
}
}
}
Типизация позволяет избежать ошибок при передаче некорректных значений в пропсы компонентов и обеспечивает автодополнение в редакторах типа VS Code.
Naive UI использует CSS-in-JS, что позволяет компонентам поставляться со встроенными стилями. Для локального импорта достаточно подключить компонент — стили подтянутся автоматически. Однако, если используется сборка с SSR или требуется глобальная настройка тем, возможен импорт глобальных стилей:
import 'naive-ui/dist/naive-ui.css'
Это гарантирует корректное отображение всех компонентов и применяемых тем оформления.
Иногда возникает необходимость загружать компоненты по мере необходимости, чтобы сократить первоначальный размер бандла. В Vue 3 это реализуется через динамический импорт:
import { defineAsyncComponent } from 'vue'
export default {
components: {
AsyncButton: defineAsyncComponent(() =>
import('naive-ui').then(module => module.NButton)
)
}
}
Такой подход особенно эффективен для крупных приложений с множеством UI-элементов, которые не используются сразу при загрузке страницы.
Naive UI предоставляет набор встроенных иконок и утилит, которые импортируются отдельно:
import { NIcon } from 'naive-ui'
import { DeleteOutlined } from '@vicons/antd'
export default {
components: {
NIcon
}
}
Комбинирование с внешними библиотеками иконок расширяет возможности кастомизации интерфейса без необходимости подключения тяжелых пакетов.
import { NButton, NInput, NCard, NMessageProvider } from 'naive-ui'
export default {
components: {
NButton,
NInput,
NCard,
NMessageProvider
},
setup() {
const message = ref(null)
const showMessage = () => {
message.value.success('Компонент успешно загружен!')
}
return { showMessage }
}
}
В этом примере демонстрируется подключение нескольких компонентов одновременно с использованием локальной регистрации и реактивного состояния для взаимодействия с пользователем. Такой подход обеспечивает контроль над размером бандла и гибкость при управлении интерфейсом.