Vue 概述

一句话

Vue 是尤雨溪(Evan You)创建的渐进式 JavaScript 框架,核心思想是响应式数据绑定 + 模板驱动,上手简单,逐步增强。


一、核心理念

渐进式框架

Vue 的设计哲学是用多少学多少。可以只在页面局部引入 Vue 处理交互,也可以用全家桶搭建大型 SPA。不强制一步到位。

简单页面交互 → 组件化 → 路由(Vue Router) → 状态管理(Pinia) → SSR(Nuxt)

响应式数据绑定

数据变了,视图自动更新;视图变了(表单输入),数据也自动同步。这就是双向绑定,开发者不需要手动同步。

模板优先

Vue 使用 HTML 模板语法,对前端开发者来说几乎零学习成本:

<template>
  <h1>Hello, {{ name }}</h1>
  <button @click="count++">点了 {{ count }} 次</button>
</template>

二、关键概念

单文件组件(SFC)

Vue 的标志性设计——把模板、逻辑、样式写在一个 .vue 文件里:

<template>
  <h1>{{ msg }}</h1>
</template>
 
<script setup>
import { ref } from 'vue'
const msg = ref('Hello Vue!')
</script>
 
<style scoped>
h1 { color: #42b883; }
</style>

scoped 让样式只作用于当前组件,不会污染其他组件。

两种 API 风格

Options API(Vue 2 风格)Composition API(Vue 3 主流)
组织方式按选项分块(data、methods、computed…)按功能逻辑组织,类似 React Hooks
适合简单组件、入门学习复杂逻辑、逻辑复用
代码复用Mixins(容易命名冲突)Composables(函数组合,清晰)

Options API:

export default {
  data() { return { count: 0 } },
  methods: {
    increment() { this.count++ }
  }
}

Composition API(<script setup>):

import { ref } from 'vue'
const count = ref(0)
const increment = () => count.value++

响应式原理

版本实现方式特点
Vue 2Object.defineProperty对新增/删除属性需要 Vue.set(),数组变更有限制
Vue 3Proxy天然支持新增/删除属性、数组索引修改,性能更好

常用响应式 API

API用途对标 React
ref()基本类型响应式(通过 .value 访问)useState
reactive()对象/数组响应式(直接访问)useState + 对象
computed()计算属性,自动缓存useMemo
watch() / watchEffect()侦听数据变化执行副作用useEffect
provide() / inject()跨层级传递数据useContext

指令系统

Vue 模板中的特殊属性,以 v- 开头:

指令用途示例
v-bind (:)动态绑定属性:href="url"
v-on (@)事件监听@click="handler"
v-model双向绑定<input v-model="text">
v-if / v-else条件渲染v-if="isLogin"
v-for列表渲染v-for="item in list"
v-show显示/隐藏(CSS display)v-show="visible"

三、生态系统

领域方案备注
路由Vue Router官方维护
状态管理Pinia(取代 Vuex)官方推荐,API 更简洁
SSR / 全栈框架NuxtVue 的 Next.js
构建工具Vite尤雨溪出品,极快的 HMR
UI 组件库Element Plus、Ant Design Vue、Naive UI
移动端uni-app、Ionic Vueuni-app 在国内很流行
桌面端Electron + Vue、Tauri + Vue

Vite

Vite 虽然由 Vue 作者创建,但它是框架无关的,React、Svelte 等都能用。现在已经成为前端构建工具的主流选择。


四、发展脉络

时间里程碑
2014Vue 1.0 发布,主打轻量易用
2016Vue 2.0,引入虚拟 DOM、组件系统成熟
2020Vite 发布,改变前端构建体验
2020Vue 3.0 发布,Composition API、Proxy 响应式、性能大幅提升
2023Vue 3 成为默认版本,Pinia 取代 Vuex
2025Vue Vapor Mode 探索(编译时优化,去掉虚拟 DOM)

五、Vue vs React 对比

设计哲学

VueReact
定位框架(自带模板、指令、双向绑定)(只管渲染,其他自己选)
理念渐进式,官方提供全家桶最小核心,社区驱动生态
模板 vs JSXHTML 模板优先(也支持 JSX)JSX 优先(JS 里写标记)
数据流双向绑定(v-model单向数据流(受控组件)
上手曲线平缓,对 HTML/CSS 开发者友好稍陡,需要理解 JSX + Hooks 心智模型

响应式机制

VueReact
核心原理自动追踪依赖(Proxy 拦截读写)不可变状态 + 重新渲染(调用 setter 触发整棵组件树 re-render)
数据更新直接修改 count.value++必须调用 setCount(count + 1),不能直接改
精确更新自动只更新依赖了该数据的地方默认整个组件重新渲染,需要 memo/useMemo 手动优化
心智负担低——改了就生效需要注意闭包陷阱、依赖数组、重渲染性能

代码风格对比

同样一个计数器:

Vue(<script setup>):

<template>
  <button @click="count++">{{ count }}</button>
</template>
 
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>

React(Hooks):

import { useState } from 'react'
 
function Counter() {
  const [count, setCount] = useState(0)
  return <button onClick={() => setCount(count + 1)}>{count}</button>
}

对比

Vue 可以直接 count++,React 必须 setCount()。Vue 模板和逻辑分离,React 用 JSX 混在一起。各有取舍。

性能

VueReact
虚拟 DOM有(Vue 3),编译时优化标记静态节点有,Fiber 架构支持并发渲染
编译优化模板编译时就能分析出哪些是静态的、哪些会变,运行时跳过不变的部分JSX 过于灵活,编译时难以优化,运行时兜底
未来方向Vapor Mode(编译时生成直接 DOM 操作,去掉虚拟 DOM)React Compiler(自动 memo 化,减少手动优化)

生态与社区

VueReact
核心团队尤雨溪 + 小团队,官方维护路由/状态管理/构建工具Meta 团队,核心库之外由社区驱动
市场份额中国、东南亚市场份额高全球最大市场份额,欧美主流
就业市场国内中小公司、外包项目多国内外大厂均有,海外机会更多
学习资源官方中文文档质量极高英文资源最丰富,社区庞大
SSR 框架NuxtNext.js
移动端uni-app(国内流行)React Native(全球流行)

怎么选?

场景推荐原因
快速上手、中小型项目Vue上手快,官方全家桶省心
大型复杂应用、团队多人协作都可以Vue 3 Composition API 和 React Hooks 能力已经接近
国内就业、快速出活Vue国内 Vue 岗位多,中文生态好
海外就业、跨平台(Web + Mobile)React全球市场大,React Native 成熟
追求极致性能Vue编译时优化天然优势
函数式编程偏好、灵活度要求高ReactJSX 就是 JavaScript,没有约束

Quote

两者都是优秀的工具。Vue 像一把好用的瑞士军刀——开箱即用;React 像一套乐高积木——自由组合。选哪个取决于你的团队、项目和个人偏好。


相关笔记