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>

相关推荐
尘世中一位迷途小书童1 小时前
Cesium 涟漪扩散点:自定义材质,参数调对了才好看
前端·面试
ttwuai1 小时前
Go 后台富文本图片上传失败排查:前端限制、接口和存储目录要一起看
前端·golang·状态模式
小雪_Snow1 小时前
JS 数组的遍历 —— 两种方式详解
前端·javascript
尽兴-2 小时前
传统 Java/Vue 系统如何一步步接入 AI 维护
java·vue.js·人工智能·ai·大模型
禅思院2 小时前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【五】
前端·架构·前端框架
kyle~2 小时前
前端---Zustand组件库(轻量快速精细化的状态管理方案)
前端
IT_陈寒2 小时前
为什么我的React状态更新总是不按套路出牌?
前端·人工智能·后端
小二·2 小时前
WebGPU 浏览器端跑大模型:让AI在网页里跑起来(WebLLM/Transformers.js实战)
开发语言·javascript·人工智能
张人玉2 小时前
基于Vue 3 + ECharts / ECharts-GL / echarts-wordcloud 的数据可视化大屏——地形与产业数据可视化大屏
vue.js·信息可视化·echarts