Naive UI — это компонентная библиотека для Vue 3, ориентированная на создание красивых и функциональных интерфейсов с минимальными усилиями. Основная философия библиотеки заключается в предоставлении готовых компонентов с полной кастомизацией, что позволяет создавать проекты с уникальным дизайном без необходимости писать сложные стили с нуля.
Ключевыми особенностями являются:
Для начала работы достаточно установить библиотеку через npm или yarn:
npm install naive-ui
# или
yarn add naive-ui
Далее библиотека подключается в проекте Vue 3 через
createApp:
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 предоставляет широкий набор компонентов: кнопки, формы, таблицы, диалоги, уведомления, селекты и многое другое. Все компоненты имеют стандартные props, слоты и события, что облегчает их интеграцию.
<template>
<n-button type="primary" @click="handleClick">
Нажми меня
</n-button>
</template>
<script setup>
const handleClick = () => {
console.log('Кнопка нажата')
}
</script>
Особенности компонента n-button:
type — задает визуальный стиль (primary,
success, error, warning,
info).size — регулирует размер кнопки (small,
medium, large).disabled — отключает взаимодействие.Большинство компонентов Naive UI поддерживают слоты,
позволяя вставлять в них собственный контент. Например, для
n-card можно определить заголовок и основной блок:
<n-card>
<template #header>
Заголовок карточки
</template>
Основной контент карточки
</n-card>
Naive UI предоставляет возможность глобальной и локальной темы.
Глобальная тема настраивается через
createTheme или параметры при подключении:
import { create, globalTheme } from 'naive-ui'
const naive = create({
theme: {
common: {
primaryColor: '#42b983',
infoColor: '#2d8cf0',
},
Button: {
borderRadius: '8px'
}
}
})
Локальная тема позволяет изменить стиль конкретного компонента без влияния на другие:
<n-button :theme="{
Button: {
color: 'red',
borderRadius: '12px'
}
}">
Красная кнопка
</n-button>
Naive UI активно использует реактивные свойства Vue 3, что позволяет связывать значения компонентов с реактивными переменными:
<template>
<n-input v-model:value="username" placeholder="Введите имя" />
<p>Имя: {{ username }}</p>
</template>
<script setup>
import { ref } from 'vue'
const username = ref('')
</script>
Для компонентов, таких как n-modal или
n-notification, доступны методы управления состоянием через
контрольные пропсы и события, например:
<n-dialog v-model:show="isDialogVisible">
Контент диалога
</n-dialog>
const isDialogVisible = ref(false)
Naive UI предоставляет централизованную систему уведомлений
(n-notification), которая позволяет создавать всплывающие
сообщения:
import { useNotification } from 'naive-ui'
const notification = useNotification()
notification.success({
title: 'Успех',
content: 'Данные успешно сохранены',
duration: 3000
})
Основные методы:
success — для успешных действийerror — для ошибокinfo — информационные сообщенияwarning — предупрежденияМожно также настраивать позиции уведомлений (top-right,
bottom-left и т.д.) и длительность отображения.
Компоненты форм (n-form, n-form-item,
n-input, n-select) поддерживают
валидаторы и реактивные модели:
<n-form :model="formData" :rules="rules">
<n-form-item label="Email" path="email">
<n-input v-model:value="formData.email" />
</n-form-item>
<n-button @click="submitForm">Отправить</n-button>
</n-form>
import { reactive } from 'vue'
const formData = reactive({ email: '' })
const rules = {
email: [
{ required: true, message: 'Введите email', trigger: 'blur' },
{ type: 'email', message: 'Неверный формат' }
]
}
const submitForm = () => {
console.log('Форма отправлена:', formData)
}
Naive UI предоставляет мощные компоненты для отображения табличных
данных: n-data-table, n-data-tbody,
n-data-th, n-data-tr.
Пример простой таблицы:
<n-data-table :columns="columns" :data="rows" />
const columns = [
{ title: 'Имя', key: 'name' },
{ title: 'Возраст', key: 'age' },
{ title: 'Город', key: 'city' }
]
const rows = [
{ name: 'Иван', age: 25, city: 'Москва' },
{ name: 'Ольга', age: 30, city: 'Санкт-Петербург' }
]
Таблицы поддерживают сортировку, фильтрацию и кастомные слоты для сложного отображения данных.
Naive UI использует встроенные CSS-анимации и Vue Transition. Для
модальных окон, уведомлений и выпадающих списков анимация включена по
умолчанию. Для кастомных анимаций можно использовать стандартный Vue
<transition> или
<transition-group> вместе с компонентами Naive
UI.
Naive UI сочетает готовые компоненты, гибкую темизацию, интеграцию с Vue 3 и полную реактивность. Она подходит как для небольших проектов, так и для крупных корпоративных приложений, где важны скорость разработки, единый стиль интерфейса и контроль над поведением компонентов.
Ключевым преимуществом остаётся минимальная конфигурация при максимальной кастомизации, что делает Naive UI одним из наиболее удобных инструментов для фронтенд-разработки на Vue 3.