Vue概述

Vue概述

  • [一、Vue 是什么?](#一、Vue 是什么?)
  • 二、核心设计思想:MVVM
  • 三、核心特性详解
    • [1. 响应式系统(Reactivity)](#1. 响应式系统(Reactivity))
    • [2. 组件化(Component)](#2. 组件化(Component))
    • [3. 虚拟 DOM(Virtual DOM)](#3. 虚拟 DOM(Virtual DOM))
    • [4. 模板语法与指令系统](#4. 模板语法与指令系统)
    • [5. 两种 API 风格](#5. 两种 API 风格)
    • [6. 生命周期](#6. 生命周期)
  • [四、Vue 项目结构](#四、Vue 项目结构)
  • [五、Vue 生态体系](#五、Vue 生态体系)
  • [六、Vue 2 vs Vue 3 主要区别](#六、Vue 2 vs Vue 3 主要区别)
  • 七、优缺点分析
  • 八、适用场景
  • 九、快速上手示例

一、Vue 是什么?

Vue.js(读音 /vjuː/,类似于 "view")是一套用于构建用户界面的渐进式 JavaScript 框架,由尤雨溪(Evan You)于 2014 年首次发布。

渐进式意味着:你可以把 Vue 当作一个轻量的增强库引入现有页面,也可以配合路由(Vue Router)、状态管理(Pinia)、构建工具(Vite)等,搭建出复杂的大型单页应用(SPA)。

Vue 的核心库只关注视图层,易于上手,也便于与第三方库或既有项目整合。


二、核心设计思想:MVVM

Vue 是一个典型的 MVVM(Model-View-ViewModel) 框架:

层级 说明
Model 数据模型层(普通 JavaScript 对象,{ }
View 视图层(DOM / HTML 模板)
ViewModel Vue 实例,负责连接 Model 与 View,实现双向数据绑定

当 Model 数据变化时,View 自动更新;用户在 View 中操作时,Model 也同步变化------无需手动操作 DOM。


三、核心特性详解

1. 响应式系统(Reactivity)

Vue 3 基于 Proxy 重构了响应式系统(Vue 2 使用 Object.defineProperty),能自动追踪数据变化并更新视图:

js 复制代码
const app = Vue.createApp({
  data() {
    return { message: 'Hello Vue!' }
  }
}).mount('app')

每个绑定 data 属性的组件都有一个 Watcher 检测数据变化,一旦检测到改变就重新渲染该组件。

2. 组件化(Component)

将一个大型应用拆分成多个小的、独立的、可复用的组件,每个 .vue 单文件组件包含:

vue 复制代码
<template>
  <div class="container">
    <h1>{{ title }}</h1>
    <button @click="add">+1</button>
  </div>
</template>

<script>
export default {
  data() {
    return { title: 'Welcome to Vue.js' }
  },
  methods: {
    add() { this.title = 'Updated!' }
  }
}
</script>

<style>
.container { text-align: center; color: blue; }
</style>

组件化的优势:

  • 提高开发效率
  • 方便重复使用
  • 简化调试步骤
  • 提升项目可维护性
  • 便于协同开发

3. 虚拟 DOM(Virtual DOM)

传统操作 DOM 会频繁触发浏览器渲染,导致页面卡顿。Vue 的做法:

  1. 用 JavaScript 计算出 DOM 操作(虚拟 DOM)
  2. 与真实 DOM 进行 diff 比较
  3. 只更新变化的部分,批量提交到真实 DOM

这大大提升了渲染性能。

4. 模板语法与指令系统

Vue 使用类似 HTML 的模板语法,通过 v- 前缀的指令实现各种功能:

指令 作用 示例
v-bind / : 绑定属性 <a :href="url">
v-model 双向绑定(表单) <input v-model="msg">
v-if / v-else 条件渲染 <p v-if="ok">YES</p>
v-show 条件显示(CSS 切换) <p v-show="ok">
v-for 列表渲染 <li v-for="item in list">
v-on / @ 事件监听 <button @click="add">
v-text 文本插值 <span v-text="msg">

插值语法 {``{ }} 也叫"胡子语法"(Moustache),用于渲染 data 中的值或简单表达式。

5. 两种 API 风格

选项式 API(Options API) 组合式 API(Composition API)
特点 datamethodscomputedwatch 等选项组织 setup()refreactive 等函数组合逻辑
适用场景 Vue 2 / 小型项目 Vue 3 推荐 / 大型项目
优势 简单直观,易于上手 逻辑复用更好,代码组织更灵活

6. 生命周期

每个 Vue 组件都经历:创建 → 挂载 → 更新 → 销毁

主要钩子函数:

钩子 时机
beforeCreate 实例初始化之后,数据观测之前
created 数据已观测,可访问 data
beforeMount 挂载开始之前
mounted 挂载完成,可访问 DOM
beforeUpdate 数据更新时
updated 视图更新后
beforeUnmount 卸载之前
unmounted 卸载完成

四、Vue 项目结构

以 Vite + Vue 3 项目为例:

复制代码
project/
├── public/              静态资源(不打包,直接复制)
├── src/
│   ├── assets/          需要打包处理的静态资源
│   ├── components/      可复用组件
│   ├── views/           页面级组件(路由对应)
│   ├── router/          路由配置
│   ├── api/             接口请求封装
│   ├── store/           状态管理(Pinia)
│   ├── App.vue          根组件
│   ├── main.js          入口文件
│   └── style.css        全局样式
├── index.html           入口 HTML
├── package.json         项目配置
├── vite.config.js       Vite 构建配置
└── .gitignore

项目运行核心流程:

复制代码
npm run dev
  → Vite 读取 vite.config.js 配置
  → 找到入口 index.html
  → index.html 引入 src/main.js
  → main.js 创建 Vue 实例,挂载到 app 节点
  → 渲染根组件 App.vue
  → 递归渲染 App.vue 内的所有子组件

五、Vue 生态体系

工具/库 用途
Vite 新一代构建工具(替代 Vue CLI/webpack),启动极快
Vue Router 单页应用路由管理
Pinia 状态管理(替代 Vuex,Vue 3 官方推荐)
Vue Devtools 浏览器调试插件,查看组件树、状态、事件
Element Plus / Vuetify / Ant Design Vue UI 组件库
Axios HTTP 请求库

六、Vue 2 vs Vue 3 主要区别

特性 Vue 2 Vue 3
响应式 Object.defineProperty Proxy(性能更好,可检测属性增删)
API 选项式为主 组合式 API(setup)+ 选项式兼容
组件 选项式 支持 <script setup> 语法糖
状态管理 Vuex Pinia(更简洁、TypeScript 友好)
构建工具 Vue CLI (webpack) Vite(推荐)
TypeScript 需要额外配置 原生支持,非常友好
新特性 --- Fragment、Teleport、Suspense 等

七、优缺点分析

✅ 优点

  • 轻量级:核心库几十 KB,不依赖第三方库
  • 易学易用:基于 HTML/CSS/JS,学习曲线平缓
  • 组件化 + 响应式:开发效率高,代码可维护
  • 虚拟 DOM:性能优异
  • 生态丰富:大量插件、UI 库、工具链
  • 渐进式:可从小到大灵活采用

⚠️ 缺点

  • 版本更新频繁:Vue 2 → 3 有较大 breaking changes,老项目迁移成本高
  • 不够标准化:无强制编码规范,团队风格可能不一致
  • 不支持 IE8 及以下:需要额外 polyfill
  • 社区规模:相比 React 全球社区略小(但在国内非常流行)

八、适用场景

适合 ✅ 不太适合 ❌
需要快速开发迭代的项目 需要严格编码规范的大型团队项目
高度交互、动态更新的 SPA 需要支持 IE8 等老旧浏览器的项目
与现有项目逐步集成 需要极度成熟稳定的企业级方案(可考虑 Angular)
管理后台、电商、小程序等 超大型应用且团队无 Vue 经验

九、快速上手示例

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
    <h1>{{ message }}</h1>
    <input v-model="message" />
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item }}
      </li>
    </ul>
  </div>

  <script>
    const app = Vue.createApp({
      data() {
        return {
          message: 'Hello Vue 3!',
          items: ['学习', '实践', '掌握']
        }
      }
    }).mount('app')
  </script>
</body>
</html>

相关推荐
Mh4 小时前
别再只会 `find` 了:Map 在前端业务里的真实用法
前端·javascript
陈随易5 小时前
FFmpeg 9.0 发布,代号 Lei,音视频处理再升级
前端·后端·程序员
爱丶狸5 小时前
Grafana_Zabbix_ImageRenderer_部署与前端操作手册
linux·前端·zabbix·grafana·kylin
用户059540174468 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen8 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜8 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉9 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上9 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978339 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒9 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端