Vue.js: Vue.js 简介

Vue.js 是一款用于构建用户界面的渐进式 JavaScript 框架——它能让你用声明式、组件化的方式高效地开发 Web 应用,从简单的表单到复杂的企业级 SPA 都能胜任。

本教程面向有 HTML/CSS/JavaScript 基础的初学者,从 Vue 3 的核心概念讲起,直到你能独立开发一个完整的中型电商后台系统。整个学习曲线与 W3Schools、菜鸟教程不同——我们走 Vue 3 + Composition API 优先路线,并配合真实电商项目(5,000 商户、30,000 SKU 的 SaaS 后台)练手。

1. 你将学到


2. 一个 SaaS 团队的前端选型故事

(1) 痛点:5 个框架,选哪个?

一家快速增长的 SaaS 公司,前端代码 200,000 行,技术负责人 Alice 在 2026 年 Q1 面临一个艰难决策:

产品经理 Charlie 加码施压:

"我们的后台有 30,000 SKU。当前 React 应用的筛选要 8 秒。新开发者要 3 周才能上线第一个功能。到 2026 Q3,两项都要 5 倍提升。"

(2) Vue 3 的解法

经过 4 周评估,Alice 选择了 Vue 3。原因如下:

TEXT 📖 仅展示
Bundle size:     850KB → 280KB    (-67%)
Initial load:    3.2s  → 0.9s    (-72%)
Onboarding time: 3 weeks → 1 week (-67%)
Job market:      growing 35% YoY

Vue 的"渐进式"特性意味着 Alice 可以逐步采用:

  1. 第 1 周:用 Vue 3 替换 1 个页面(CDN script 标签,无需构建)
  2. 第 4 周:迁移 10 个页面到单文件组件
  3. 第 12 周:完整 SPA + Router + Pinia
  4. 第 24 周:200,000 行代码迁移完成,零停机

(3) 收益

使用 Vue 3 六个月后,团队测量了以下指标:


3. Vue 是什么?

Vue(读作 /vjuː/,类似 "view")是一套用于构建用户界面的渐进式 JavaScript 框架。它由尤雨溪(Evan You)于 2014 年创建,目前由 Vue.js 核心团队和全球社区维护。

(1) 核心定义 + Vue 3 架构图

100%
graph TB
    subgraph Vue3生态
        V[Vue 3 核心<br/>@vue/runtime-core]
        R[Vue Router 4<br/>路由管理]
        P[Pinia<br/>状态管理]
        S[SSR/SSG<br/>Nuxt 3]
        T[Vite<br/>构建工具]
        U[UI 组件库<br/>Element Plus/Naive UI]
    end
    
    V --> R
    V --> P
    V --> S
    T --> V
    U --> V
    
    style V fill:#42b883,color:#fff
    style R fill:#35495e,color:#fff
    style P fill:#ffd02f
    style S fill:#00dc82
    style T fill:#646cff,color:#fff

(2) 五大核心特点

特点 含义 对比
渐进式框架 可按需采用,从轻量库到完整框架都可 React 强制 JSX,Angular 全家桶
响应式数据 数据变化自动更新 UI,无需手动操作 DOM jQuery 需要手动 $(sel).text()
组件化 UI 拆分为独立可复用组件,单文件组件 (SFC) HTML 标签不可复用,组件可组合
声明式渲染 描述"应该长什么样",而非"如何变成那样" 命令式 DOM 操作
学习曲线平缓 HTML/CSS/JS 基础即可上手,TS 渐进 Angular 需先学装饰器/DI

(3) Vue 适用场景

场景 适合度 说明
中小型 SPA(电商/CRM/Admin) ⭐⭐⭐⭐⭐ 最佳场景,Vue 主流用法
大型企业应用 ⭐⭐⭐⭐ 需要 Nuxt 3 + 微前端架构
移动端 H5 ⭐⭐⭐⭐ uni-app / Vant 框架
桌面端应用 ⭐⭐⭐ Electron + Vue(中等方案)
静态博客 ⭐⭐ Astro / Nuxt Content 更合适
嵌入式 widget ⭐⭐⭐⭐⭐ 极小体积,CDN 直接引入

4. Vue 3 vs Vue 2:核心差异

(1) 主要改进一览

维度 Vue 2 Vue 3 影响
响应式系统 Object.defineProperty Proxy 性能 ↑,支持数组/Map/Set
API 风格 Options API 为主 Composition API 优先 逻辑复用更灵活
TypeScript 需手动配 一等公民支持 类型推断 ↑
打包体积 ~33KB ~20KB(gzipped) 加载 ↑
渲染速度 1x 1.2-2x 性能 ↑
Tree-shaking 不支持 全支持 未用代码不打包
Fragment 单根 多根节点 模板更灵活
Teleport 内置 模态框/Drawer 写法简化
Suspense 内置 异步组件处理优雅

(2) 为什么推荐 Vue 3?

TEXT 📖 仅展示
✅ Vue 3 是当前主版本(2020-09 发布,2026 已稳定 5+ 年)
✅ Vue 2 已于 2023-12 EOL(End of Life),不再维护
✅ 90% 的新项目、100% 的新生态工具都基于 Vue 3
✅ Composition API 是 Vue 团队推荐的现代写法
✅ TypeScript 支持显著改善,团队代码质量 ↑

❌ Vue 2 只在维护老项目时需要
❌ 不学 Vue 3 = 错过 Vue 生态 95% 的现代工具

5. Composition API vs Options API

(1) 两种 API 风格对比

维度 Options API Composition API
写法 data / methods / computed 分块 setup() 函数集中
逻辑复用 mixins(不推荐) Composables(推荐)
类型推断 一般 优秀(专为 TS 设计)
代码组织 按选项类型分块 按业务逻辑分块
学习曲线 平缓(新手友好) 略陡(要理解 ref/reactive)
适合规模 小到中型 中到大型(推荐所有规模)

(2) Options API 示例

JS
// Options API - 按选项分块(传给 createApp)
{
  data() {
    return { count: 0, name: 'Alice' }
  },
  computed: {
    doubleCount() {
      return this.count * 2
    }
  },
  methods: {
    increment() {
      this.count++
    }
  },
  mounted() {
    console.log('Component mounted')
  }
}

(3) Composition API 示例

JS
// Composition API - 按逻辑分块(在 setup() 函数中)
const { ref, computed, onMounted } = Vue

setup() {
  const count = ref(0)
  const name = ref('Alice')

  const doubleCount = computed(() => count.value * 2)

  function increment() {
    count.value++
  }

  onMounted(() => {
    console.log('Component mounted')
  })

  return { count, name, doubleCount, increment }
}

(4) 选哪个?

建议 场景
新项目用 Composition API Vue 3 项目首选
维护老项目 保持 Options API(不破坏现有代码)
团队新人多 Composition API 反而更易学(无 this 困惑)
复杂业务逻辑 Composition API(按业务组织代码更清晰)

6. Vue 3 生态圈

Vue 3 不只是一个框架,而是一套完整的前端开发生态

(1) 生态组件图

100%
graph LR
    subgraph 核心
        V[Vue 3 核心]
    end
    
    subgraph 官方推荐
        R[Vue Router 4]
        P[Pinia]
        T[Vite]
    end
    
    subgraph 社区生态
        E[Element Plus]
        N[Naive UI]
        U[UnoCSS]
        I[Vue I18n]
    end
    
    V --> R
    V --> P
    V --> T
    V --> E
    V --> N
    V --> U
    V --> I
    
    style V fill:#42b883,color:#fff

(2) 关键工具速查表

工具 角色 必学? 官网
Vue 3 核心 框架本身 ✅ 必学 vuejs.org
Vite 构建工具,5x 速度 ✅ 必学 vitejs.dev
Vue Router 4 路由管理(SPA 必备) ✅ 必学 router.vuejs.org
Pinia 状态管理(Vuex 替代) ✅ 必学 pinia.vuejs.org
Element Plus 桌面端 UI 库 选学 element-plus.org
Naive UI 桌面端 UI 库 选学 naiveui.com
Vue I18n 国际化 选学 vue-i18n.intlify.dev
Nuxt 3 SSR/SSG 框架 选学 nuxt.com
VueUse 实用 Composable 库 选学 vueuse.org

(3) 完整学习路径

TEXT 📖 仅展示
阶段 1(本教程 Phase 1-3):Vue 3 核心 + Composition API
阶段 2(本教程 Phase 4):Vue Router + Pinia + 进阶 API
阶段 3(本教程 Phase 5):Vite + 真实项目 + 部署
进阶(推荐后续学):Nuxt 3 SSR / Vitest 测试 / 性能优化

7. 完整示例:第一个 Vue 3 应用

▶ 示例:Hello Vue 3 计数器(Composition API)

HTML
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>

<div id="app">
  <h1>{{ greeting }}</h1>
  <p>You clicked the button <strong>{{ count }}</strong> times.</p>
  <button @click="increment">Click me</button>
  <p>By {{ author }}, {{ currentYear }}</p>
</div>

<script>
const { createApp, ref, computed } = Vue
createApp({
  setup() {
    const count = ref(0)
    const author = ref('Alice')
    const currentYear = computed(() => new Date().getFullYear())
    const greeting = computed(() => `Hello Vue 3! Welcome, ${author.value}!`)
    function increment() { count.value++ }
    return { count, author, currentYear, greeting, increment }
  }
}).mount('#app')
</script>
▶ 试一试

输出(点击按钮后):

TEXT 📖 仅展示
Hello Vue 3! Welcome, Alice!

You clicked the button 5 times.

[Click me]

By Alice, 2026

▶ 示例:CDN 引入方式(5 行 HTML 跑起来)

HTML
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>

<div id="app">
  <h1>{{ message }}</h1>
  <button @click="count++">Clicked {{ count }} times</button>
</div>

<script>
const { createApp, ref } = Vue
createApp({
  setup() {
    return {
      message: ref('Hello Vue 3!'),
      count: ref(0)
    }
  }
}).mount('#app')
</script>
▶ 试一试

输出:打开 HTML 文件,页面显示 "Hello Vue 3!" 和按钮,点击按钮数字 +1。

▶ 示例:Options API 写法(对比)

HTML
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>

<div id="app">
  <h1>{{ message }}</h1>
  <p>Count: {{ count }}, Double: {{ doubleCount }}</p>
  <button @click="increment">+1</button>
</div>

<script>
Vue.createApp({
  data() { return { count: 0, message: 'Hello Vue 3!' } },
  computed: { doubleCount() { return this.count * 2 } },
  methods: { increment() { this.count++ } }
}).mount('#app')
</script>
▶ 试一试

输出:页面显示 "Hello Vue 3!" 和 "Count: 0, Double: 0",点击按钮 Count 递增,Double 自动跟随。

▶ 示例:进度衡量表(5 分钟/30 分钟/1 小时)

阶段 时间 完成标志
跑通 Hello World 5 分钟 浏览器看到 Vue 默认页
改 1 行代码 10 分钟 改模板中 message 变量值
加 1 个响应式数据 20 分钟 ref 变量 + 模板显示
加 1 个交互 30 分钟 @click 事件 + 计数器
部署到 Vercel 1 小时 公开 URL 可访问

▶ 示例:5 大常见陷阱(5 分钟避坑)

陷阱 现象 解决
忘记 .value count++ 不生效 ref 在 JS 中需 count.value++
template 自动解包 模板里不需要 .value {{ count }} 即可
对象响应丢失 obj.name = 'x' 不响应 reactive() 包裹
数组直接赋值 arr[0] = 'x' 不响应 splicepush
异步数据丢失 setTimeout 中赋值不响应 ref/reactive 内部已处理

❓ 常见问题

Q Vue 3 和 React 到底选哪个?
A 选你能坚持学完的那个。两者都能做 95% 的事情。Vue 学习曲线更平缓、模板语法更接近 HTML,新手 2 周能上手;React 生态更大但 JSX 心智模型需要适应。找工作方面两者都有大量需求。
Q 必须学 TypeScript 才能用 Vue 3 吗?
A 不是必须。Vue 3 完全支持纯 JavaScript。但如果你计划进企业级项目,强烈建议学 TS——Vue 3 的 Composition API 配 TS 是最佳实践,类型推断能减少 50% 的 bug。
Q Vue 3 的 Composition API 难学吗?
A 比 Options API 略难(多理解 ref/reactive 概念),但学会了之后更强大。建议先学 Options API 入门,再切到 Composition API 进阶。
Q Vue 3 适合做移动端 App 吗?
A 可以做 H5(uni-app 框架),但做原生 App 还是推荐 Flutter / React Native。Vue 3 强项是 Web(PC 端和 H5),移动端是次选。
Q 学完本教程能找 Vue 工作吗?
A 能。本教程涵盖 Vue 3 + Router + Pinia + Element Plus + Vite + TypeScript,是 90% Vue 岗位的要求。剩下的项目经验和算法题在工作中学习。
Q Vue 2 项目还能维护吗?
A 能维护但不再升级。Vue 2 已于 2023-12 EOL,新项目一律用 Vue 3。如果维护老项目,建议规划迁移到 Vue 3。
Q Vue 3 有哪些知名公司在用?
A GitLab、任天堂、Adobe Behance、阿里巴巴(部分)、小米(部分)、宝马、NASA 等。Vue 在中国、东南亚、欧洲市场份额持续增长。

📖 小节


📝 作业

  1. 基础题(难度⭐) 访问 vuejs.org 官方文档,列出 Vue 3 的 3 个核心特性,并用 1 句话解释每个特性。

  2. 进阶题(难度⭐⭐) 对比 Vue 3 和 React 18 的以下维度(用表格):

    维度 Vue 3 React 18
    Bundle size ? ?
    学习曲线 ? ?
    状态管理库 ? ?
    路由库 ? ?
    国内市场占比 ? ?
  3. 挑战题(难度⭐⭐⭐) 调研你身边 3 个真实项目(自己公司/朋友公司/开源项目),记录:

    1. 用了哪个前端框架?
    2. 为什么选这个框架?
    3. 如果换 Vue 3,需要多大成本?

    写一份 300 字的调研报告发到评论区。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏