组件库引入教程&推荐

这样就可以在任何组件里直接使用 Naive UI 的所有组件,比如:

#组件库

全量引入(全局注册所有组件)

示例(main.ts)

js
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 的所有组件,比如:

html
<n-button type="primary">按钮</n-button>
<n-input placeholder="输入点什么..." />

优点:

  • 简单,一行搞定;
  • 不用每个组件都 import。

⚠缺点:

  • 会引入所有组件和依赖,打包体积增大;
  • 对于大项目或移动端项目不太推荐。

按需引入(自动导入)

如果你使用 Vite(Vue 3 默认构建工具),推荐用 unplugin-vue-components 插件,它可以 自动导入 Naive UI 组件,不用手动引入,也不用全量加载。

安装:

js
npm install -D unplugin-vue-components unplugin-auto-import

配置 vite.config.ts:

js
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()]
    })
  ]
})

然后在组件中可以直接写:

html
<n-button>按钮</n-button>
<n-input />

无需 import,也无需全量引入!

部分全量(手动组合)

如果你只想引入一部分常用组件,可以这样:

js
import {
  create,
  NButton,
  NInput,
  NMessageProvider,
  NNotificationProvider
} from 'naive-ui'
const naive = create({
  components: [NButton, NInput, NMessageProvider, NNotificationProvider]
})
app.use(naive)

这样就只会注册指定组件,体积小很多。

特殊

js
  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) 写组件时, 我们通常会写成:

js
import { defineComponent } from 'vue'

export default defineComponent({
  setup() {
    // 组件逻辑
    return {}
  }
})

👉 它的作用其实就是: 告诉 TypeScript / Vue 编译器:“这是一个 Vue 组件定义对象。”

🌟 对比一下老版本写法(Vue 2)

在 Vue 2 或 Options API 里我们写:

js
export default {
  data() { ... },
  methods: { ... },
  components: { ... }
}

而在 Vue 3 里, 如果你使用 组合式 API (setup()),推荐用:

js
export default defineComponent({
  setup() { ... }
})

所以 defineComponent({...}) 就是 Vue 3 的组件定义语法糖, 它让 TypeScript 能识别出你的组件类型(比如 props、emits、slots 等)。

🧠 二、为什么需要它?

不写也能跑,但会有问题:

js
export default {
  setup() {
    return {}
  }
}

这在运行时没问题。 但是如果你用 TypeScript 或 IDE 自动补全,就会发现:

  • TS 无法正确识别 propsemit
  • 缺少类型推导;
  • IDE 不知道这是一个标准的 Vue 组件。

所以官方推荐:

defineComponent() 来包裹组件定义对象。


三、底层原理(简单理解版)

js
function 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 实例给子组件使用。

js
// 伪代码
provide('message-api', { info, success, error, ... })

useMessage() 的内部其实是:

js
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 PlusVue 3桌面端组件库企业后台、管理系统中性偏商务成熟稳定,文档详细,后台系统常用首选中文社区活跃,使用面广
Naive UIVue 3桌面端组件库Vue 3 + Vite 项目、管理后台风格清新、现代Vue 3 原生,TypeScript 友好,API 设计现代作者积极维护,和 Vite 结合好
Ant Design VueVue 3桌面端组件库企业级后台、金融类系统Ant Design 体系,专业大气Ant Design 的 Vue 实现,设计体系完整来自蚂蚁金服,文档专业
VuetifyVue 2/3桌面端 + 移动端(全端)通用 Web 应用、国际化项目Material Design 风格组件丰富,支持多端布局国外社区大,Vue 生态里的老牌 UI 库
Quasar FrameworkVue(为主)桌面端 + 移动端 + 跨平台SPA、PWA、Electron、移动 App 等多端项目偏 Material / 扁平化大一统框架,一套代码多端运行,功能非常全面国外知名,更新活跃
PrimeVueVue 3桌面端 + 移动端(全端)通用企业应用、大型项目多主题可选90+ 组件,功能覆盖面广,主题和外观可定制Prime React / Angular / Vue 一系列之一
BootstrapVueVue + Bootstrap 4/5桌面端 Web 应用已熟悉 Bootstrap 的团队、传统 Web 项目Bootstrap 风格Bootstrap 语法 + Vue 组件,迁移成本低适合老项目或重用现有 Bootstrap 设计
VantVue 2/3移动端组件库H5、电商、微信/支付宝小程序、移动端 App简洁、偏电商风轻量、上手快,小程序支持友好有赞团队维护,在国内移动端项目中非常常见
NutUIVue / React / Taro移动端组件库H5、小程序、Taro 跨端项目京东系电商风移动端体验好,支持多端(小程序 / H5)京东出品,在小程序/电商场景里很常见
Tailwind CSSVue / React / 任意原子化 CSS 工具(非组件库)现代 Web、设计自由度高、快速开发无预设组件,完全自定义类名即样式,极度灵活,但需要自己封装组件海外超火,和 Nuxt / Vite 等配合非常多
Shadcn/UIReact + Tailwind组件集 + 模板(非完整 UI 库)中大型 React 项目、需要设计统一但可自定义极简、现代化提供一套可拷贝的组件代码,和 Tailwind 深度配合,灵活度高React 社区很火,适合喜欢 Tailwind 的团队
MUI (Material UI)React桌面端 + 移动端(全端)海外通用 Web 项目、Dashboard、SaaSGoogle Material Design 实现组件齐全,文档丰富,国际化友好海外 React 项目标配之一
Ant Design ReactReact桌面端组件库企业后台、管理系统、内部工具Ant Design 体系,偏企业 / 金融风Ant Design 官方 React 实现,设计规范统一在国内企业后台中使用极其广泛

喜欢的风格:

「现代极简 + SaaS Dashboard / Design System 风」


你以后搜设计稿/灵感时可以用的关键词

在 Dribbble / Figma / Behance / GitHub 上,可以搜:

  • 英文:
    • modern minimal dashboard ui
    • saas dashboard design
    • admin panel ui kit
    • shadcn 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 + Prelinehttps://flyonui.com/

image-20251118165322940

daisyUI

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

原来是一套Tailwind

image-20251118225909717

shadcn(最爱)

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

https://ui.shadcn.com/

image-20251118230041111

“shadcn/ui is built to work with all React frameworks.”

不支持vue

不过有社区移植过来的!

shadcn-vue(社区版移植)GitHub

https://www.shadcn-vue.com

依旧好看:

image-20251118170337256

长得不错!!!

image-20251118170531944

Flowbite

https://flowbite.com/

基于 Tailwind 的组件库 + 区块库 + Figma 设计系统。

  • 默认样式偏“大块”、“后台应用风”,很适合做仪表盘、管理系统。

  • 有 React/Vue 封装,也可以只用 HTML 版本。

  • 风格:偏企业级,按 default 尺寸用就挺大气,别刻意选 size="sm" 就行。

image-20251118220109097

关键是给的代码:

image-20251118220149882

直接就是源码

Preline UI(类似FlyonUI )

官网:https://preline.co

特点:

  • 官方就是“Tailwind 组件库 + blocks + template + JS 插件 + Figma”。(Preline)
  • FlyonUI 的交互层就是基于 Preline JS 的,所以感觉会很像。
  • 组件尺寸、间距都偏“大空间”,适合做 landing / dashboard。

适合你的用法:

  • 可以把 FlyonUI 当主库,缺的模块去 Preline 抄,风格比较统一。

也是非常的大,SAAS:

image-20251118220405813

image-20251118230358192

HyperUI(静态)

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

image-20251118220634995

混合开发/多端合一

你说的很有道理:多端合一框架(比如 Taro、uni-app、RN)确实更复杂,bug 出现概率也更高。但它们存在是因为 业务需要

📌 多端合一的好处

  1. 一次开发,多端运行
    • 写一套代码,可以同时跑 H5、微信小程序、支付宝小程序、App。
    • 对人手少的小团队非常友好。
  2. 维护成本低
    • 不用分别养三套团队(Web、iOS、Android),节省人力。
  3. 上线速度快
    • 快速迭代,功能一改就能同步到各个平台。

📌 混合开发(Hybrid / 分端开发)的优势

  1. 更稳定
    • 每个平台用原生或专属技术栈(比如 Swift/Java/Kotlin/Flutter),出 bug 的概率更低。
  2. 性能更好
    • 原生开发比跨端框架更流畅,尤其在高性能需求的场景(游戏、复杂动画)。
  3. 灵活度更高
    • 可以针对不同端做差异化优化,不受跨端框架限制。

📌 为什么很多团队还是选择多端合一?

  • 如果公司是 电商 / 工具类应用,功能差不多、追求上线快 → 选 多端合一(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 调用、状态管理、数据存储和并发问题。

评论

评论加载中……