组件库引入教程&推荐
这样就可以在任何组件里直接使用 Naive UI 的所有组件,比如:
全量引入(全局注册所有组件)
示例(main.ts)
import { createApp } from 'vue'
import App from './App.vue'
// 🌟 全量引入 Naive UI
import naive from 'naive-ui'
const app = createApp(App)
// 注册所有 Naive UI 组件
app.use(naive)
app.mount('#app')这样就可以在任何组件里直接使用 Naive UI 的所有组件,比如:
<n-button type="primary">按钮</n-button>
<n-input placeholder="输入点什么..." />优点:
- 简单,一行搞定;
- 不用每个组件都 import。
⚠缺点:
- 会引入所有组件和依赖,打包体积增大;
- 对于大项目或移动端项目不太推荐。
按需引入(自动导入)
如果你使用 Vite(Vue 3 默认构建工具),推荐用 unplugin-vue-components 插件,它可以 自动导入 Naive UI 组件,不用手动引入,也不用全量加载。
安装:
npm install -D unplugin-vue-components unplugin-auto-import配置 vite.config.ts:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
Components({
resolvers: [NaiveUiResolver()]
})
]
})然后在组件中可以直接写:
<n-button>按钮</n-button>
<n-input />无需 import,也无需全量引入!
部分全量(手动组合)
如果你只想引入一部分常用组件,可以这样:
import {
create,
NButton,
NInput,
NMessageProvider,
NNotificationProvider
} from 'naive-ui'
const naive = create({
components: [NButton, NInput, NMessageProvider, NNotificationProvider]
})
app.use(naive)这样就只会注册指定组件,体积小很多。
特殊
import { defineComponent } from 'vue'
import { NConfigProvider, NInput, NDatePicker, NSpace } from 'naive-ui'
// theme
import { createTheme, inputDark, datePickerDark } from 'naive-ui'
// locale & dateLocale
import { zhCN, dateZhCN } from 'naive-ui'
export default defineComponent({
components: {
NConfigProvider,
NInput,
NDatePicker,
NSpace
},
setup() {
return {
darkTheme: createTheme([inputDark, datePickerDark]),
zhCN,
dateZhCN
}
}
})一、
defineComponent是什么?在 Vue 3 里,当我们用 Composition API(组合式 API) 写组件时, 我们通常会写成:
jsimport { defineComponent } from 'vue' export default defineComponent({ setup() { // 组件逻辑 return {} } })👉 它的作用其实就是: 告诉 TypeScript / Vue 编译器:“这是一个 Vue 组件定义对象。”
🌟 对比一下老版本写法(Vue 2)
在 Vue 2 或 Options API 里我们写:
jsexport default { data() { ... }, methods: { ... }, components: { ... } }而在 Vue 3 里, 如果你使用 组合式 API (
setup()),推荐用: jsexport default defineComponent({ setup() { ... } })所以
defineComponent({...})就是 Vue 3 的组件定义语法糖, 它让 TypeScript 能识别出你的组件类型(比如 props、emits、slots 等)。🧠 二、为什么需要它?
不写也能跑,但会有问题:
jsexport default { setup() { return {} } }这在运行时没问题。 但是如果你用 TypeScript 或 IDE 自动补全,就会发现:
- TS 无法正确识别
props、emit;- 缺少类型推导;
- IDE 不知道这是一个标准的 Vue 组件。
所以官方推荐:
用
defineComponent()来包裹组件定义对象。
三、底层原理(简单理解版)
jsfunction defineComponent(options) { return options }😆 没错,它本身其实什么都没干! 它只是一个类型辅助函数(type helper), 在编译阶段告诉 TypeScript “这是一个 Vue 组件定义”, 从而获得正确的类型推导和自动补全。
➡️ 如果你用
<script setup>语法(Vue 3 推荐写法), 就不需要defineComponent了,因为 Vue 编译器会自动帮你加上。
✅ 五、总结一句话
场景 是否需要 defineComponent传统写法( export default {})❌ 不需要 Composition API(带 setup())✅ 建议使用 <script setup>语法❌ 不需要(自动处理)
<n-message-provider> 是一个「上下文提供者(provider)」组件,
它通过 Vue 的 provide/inject 机制 提供一个 message 实例给子组件使用。
// 伪代码
provide('message-api', { info, success, error, ... })useMessage() 的内部其实是:
const messageApi = inject('message-api')
if (!messageApi) throw new Error('No outer <n-message-provider /> found')所以,如果你调用 useMessage() 的位置不在 provider 内部,就会报错。
小结
| 方式 | 写法 | 优点 | 缺点 |
|---|---|---|---|
| ✅ 全量引入 | app.use(naive) | 简单粗暴 | 体积大 |
| 🌟 自动导入(推荐) | 用 unplugin-vue-components | 性能好,开发快 | 要配置 vite 插件 |
| 🎯 手动部分引入 | create({ components: [...] }) | 控制体积 | 稍微麻烦 |
Vue 常见 UI 组件库
常见 Vue 生态里的 UI 组件库
| 名称 | 技术栈 | 定位 / 端 | 适用场景 | 风格 / 设计 | 主要特点 | 生态 / 备注 |
|---|---|---|---|---|---|---|
| Element Plus | Vue 3 | 桌面端组件库 | 企业后台、管理系统 | 中性偏商务 | 成熟稳定,文档详细,后台系统常用首选 | 中文社区活跃,使用面广 |
| Naive UI | Vue 3 | 桌面端组件库 | Vue 3 + Vite 项目、管理后台 | 风格清新、现代 | Vue 3 原生,TypeScript 友好,API 设计现代 | 作者积极维护,和 Vite 结合好 |
| Ant Design Vue | Vue 3 | 桌面端组件库 | 企业级后台、金融类系统 | Ant Design 体系,专业大气 | Ant Design 的 Vue 实现,设计体系完整 | 来自蚂蚁金服,文档专业 |
| Vuetify | Vue 2/3 | 桌面端 + 移动端(全端) | 通用 Web 应用、国际化项目 | Material Design 风格 | 组件丰富,支持多端布局 | 国外社区大,Vue 生态里的老牌 UI 库 |
| Quasar Framework | Vue(为主) | 桌面端 + 移动端 + 跨平台 | SPA、PWA、Electron、移动 App 等多端项目 | 偏 Material / 扁平化 | 大一统框架,一套代码多端运行,功能非常全面 | 国外知名,更新活跃 |
| PrimeVue | Vue 3 | 桌面端 + 移动端(全端) | 通用企业应用、大型项目 | 多主题可选 | 90+ 组件,功能覆盖面广,主题和外观可定制 | Prime React / Angular / Vue 一系列之一 |
| BootstrapVue | Vue + Bootstrap 4/5 | 桌面端 Web 应用 | 已熟悉 Bootstrap 的团队、传统 Web 项目 | Bootstrap 风格 | Bootstrap 语法 + Vue 组件,迁移成本低 | 适合老项目或重用现有 Bootstrap 设计 |
| Vant | Vue 2/3 | 移动端组件库 | H5、电商、微信/支付宝小程序、移动端 App | 简洁、偏电商风 | 轻量、上手快,小程序支持友好 | 有赞团队维护,在国内移动端项目中非常常见 |
| NutUI | Vue / React / Taro | 移动端组件库 | H5、小程序、Taro 跨端项目 | 京东系电商风 | 移动端体验好,支持多端(小程序 / H5) | 京东出品,在小程序/电商场景里很常见 |
| Tailwind CSS | Vue / React / 任意 | 原子化 CSS 工具(非组件库) | 现代 Web、设计自由度高、快速开发 | 无预设组件,完全自定义 | 类名即样式,极度灵活,但需要自己封装组件 | 海外超火,和 Nuxt / Vite 等配合非常多 |
| Shadcn/UI | React + Tailwind | 组件集 + 模板(非完整 UI 库) | 中大型 React 项目、需要设计统一但可自定义 | 极简、现代化 | 提供一套可拷贝的组件代码,和 Tailwind 深度配合,灵活度高 | React 社区很火,适合喜欢 Tailwind 的团队 |
| MUI (Material UI) | React | 桌面端 + 移动端(全端) | 海外通用 Web 项目、Dashboard、SaaS | Google Material Design 实现 | 组件齐全,文档丰富,国际化友好 | 海外 React 项目标配之一 |
| Ant Design React | React | 桌面端组件库 | 企业后台、管理系统、内部工具 | Ant Design 体系,偏企业 / 金融风 | Ant Design 官方 React 实现,设计规范统一 | 在国内企业后台中使用极其广泛 |
喜欢的风格:
「现代极简 + SaaS Dashboard / Design System 风」
你以后搜设计稿/灵感时可以用的关键词
在 Dribbble / Figma / Behance / GitHub 上,可以搜:
- 英文:
modern minimal dashboard uisaas dashboard designadmin panel ui kitshadcn style ui/tailwind dashboard ui- 中文:
极简后台界面SaaS 管理后台设计数据仪表盘 UI设计灵感(多个用例):https://www.saasframe.io/
Arco Design 字节跳动
Arco Design Vue 字节跳动:https://arco.design/docs/spec/values-of-arcodesign
FlyonUI(超爱)
FlyonUI = Tailwind CSS 组件库,基于 daisyUI + Preline。https://flyonui.com/

daisyUI
daisyUI 是你一定会喜欢的 Tailwind CSS 插件!它提供实用的组件类名,帮助你编写更少的代码,更快地构建产品。
原来是一套Tailwind

shadcn(最爱)
一套设计精美的组件,您可以自定义、扩展和构建。

“shadcn/ui is built to work with all React frameworks.”
不支持vue
不过有社区移植过来的!
shadcn-vue(社区版移植)GitHub
依旧好看:

长得不错!!!

Flowbite
基于 Tailwind 的组件库 + 区块库 + Figma 设计系统。
-
默认样式偏“大块”、“后台应用风”,很适合做仪表盘、管理系统。
-
有 React/Vue 封装,也可以只用 HTML 版本。
-
风格:偏企业级,按 default 尺寸用就挺大气,别刻意选
size="sm"就行。

关键是给的代码:

直接就是源码
Preline UI(类似FlyonUI )
特点:
- 官方就是“Tailwind 组件库 + blocks + template + JS 插件 + Figma”。(Preline)
- FlyonUI 的交互层就是基于 Preline JS 的,所以感觉会很像。
- 组件尺寸、间距都偏“大空间”,适合做 landing / dashboard。
适合你的用法:
- 可以把 FlyonUI 当主库,缺的模块去 Preline 抄,风格比较统一。
也是非常的大,SAAS:


HyperUI(静态)
- 官网:hyperui.dev
- 特点:
- 免费的、可复制的 Tailwind 组件集合,强调适用于营销页 + 管理后台 + 电商。
- 没有额外 JS,完全是 HTML + class,自己控制行为。

混合开发/多端合一
你说的很有道理:多端合一框架(比如 Taro、uni-app、RN)确实更复杂,bug 出现概率也更高。但它们存在是因为 业务需要:
📌 多端合一的好处
- 一次开发,多端运行
- 写一套代码,可以同时跑 H5、微信小程序、支付宝小程序、App。
- 对人手少的小团队非常友好。
- 维护成本低
- 不用分别养三套团队(Web、iOS、Android),节省人力。
- 上线速度快
- 快速迭代,功能一改就能同步到各个平台。
📌 混合开发(Hybrid / 分端开发)的优势
- 更稳定
- 每个平台用原生或专属技术栈(比如 Swift/Java/Kotlin/Flutter),出 bug 的概率更低。
- 性能更好
- 原生开发比跨端框架更流畅,尤其在高性能需求的场景(游戏、复杂动画)。
- 灵活度更高
- 可以针对不同端做差异化优化,不受跨端框架限制。
📌 为什么很多团队还是选择多端合一?
- 如果公司是 电商 / 工具类应用,功能差不多、追求上线快 → 选 多端合一(Taro、uni-app、RN)。
- 如果公司是 大型产品(抖音、微信、王者荣耀),用户体验要求极高 → 基本都是 分端开发。
👉 所以本质是 权衡成本和体验:
- 人少 / 需求快 → 多端合一。
- 资金多 / 要求高 → 混合或原生分端。
2. 你是为了 个人项目 / 创业
- 想快速上线产品:多端合一(Taro/uni-app/React Native/Flutter) → 一套代码,多平台。
- 想打磨极致体验:分端开发(原生 Android / iOS + Web 前端) → 成本高,但效果最好。
阶段 3:混合多端框架
目的:用前端知识实现 一次开发,多端运行 学习内容:
- Taro / Uni-app / React Native / Flutter 任选一种
- 学习如何复用 React/Vue 知识
- 小程序 H5 App 一套代码跑起来
- 状态管理、API 封装、UI 组件库适配(NutUI / Vant)
- 实战:做一个移动商城 App 或社交小应用
阶段 4:后端分布式技术栈
目的:补全后端能力,实现 前后端完整闭环 学习内容:
- 语言 & 框架:
- Java + Spring Boot / Spring Cloud 或 Node.js + NestJS
- 数据库:
- MySQL / PostgreSQL / Redis
- 消息队列:
- Kafka / RabbitMQ
- 分布式 & 架构:
- 微服务基础、负载均衡、缓存设计
- RESTful / GraphQL API 设计
- DevOps & 部署:
- Docker、Kubernetes、CI/CD 简单了解
- 实战:
- 设计一个小型分布式系统(如商品库存管理 + App 前端展示)
理由:到这个阶段你已有移动端、前端基础,后端再加分布式概念,会理解 API 调用、状态管理、数据存储和并发问题。
评论
评论加载中……