1. 基本概念

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。它被设计为可以自底向上逐层应用,核心库只关注视图层,易于上手,便于与第三方库或既有项目整合。

2. 核心特性

渐进式框架

  • 可以在项目中逐步引入,不需要重写整个应用
  • 从简单的页面交互到复杂的 SPA 都能胜任

响应式数据绑定

  • 数据变化自动更新视图
  • 基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现

组件化开发

  • 将 UI 拆分为独立、可复用的组件
  • 每个组件包含模板、逻辑和样式

双向数据绑定

  • v-model 指令实现表单元素的双向绑定
<input v-model="message" />

3. Vue 模板语法

插值表达式

<template>
  <div>{{ message }}</div>
</template>

指令系统

<template>
  <div v-if="show">条件渲染</div>
  <ul>
    <li v-for="item in list" :key="item.id">{{ item.name }}</li>
  </ul>
  <button @click="handleClick">点击事件</button>
</template>

4. 组件结构(单文件组件)

<template>
  <!-- 模板 -->
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  data() {
    return {
      count: 0
    }
  },
  methods: {
    increment() {
      this.count++
    }
  }
}
</script>
 
<style scoped>
/* 样式 */
.hello {
  color: #42b883;
}
</style>

5. Vue 3 新特性

Composition API

import { ref, reactive, computed, onMounted } from 'vue'
 
export default {
  setup() {
    const count = ref(0)
    const user = reactive({ name: 'John' })
    
    const doubledCount = computed(() => count.value * 2)
    
    onMounted(() => {
      console.log('组件挂载完成')
    })
    
    return { count, user, doubledCount }
  }
}

更好的 TypeScript 支持 性能提升 - 更小的包体积,更快的渲染 多个根节点 - Fragment 支持 Teleport - 组件传送功能

6. 核心功能

指令系统

  • v-if/v-else:条件渲染
  • v-for:列表渲染
  • v-model:双向绑定
  • v-bind(:):属性绑定
  • v-on(@):事件监听

计算属性和侦听器

computed: {
  fullName() {
    return this.firstName + ' ' + this.lastName
  }
},
watch: {
  message(newVal, oldVal) {
    console.log('message changed')
  }
}

组件通信

  • Props down:父传子
  • Events up:子传父
  • Provide/Inject:跨层级传递
  • Vuex/Pinia:状态管理

7. 生态系统

官方工具

  • Vue CLI / Vite:项目脚手架
  • Vue Router:路由管理
  • Vuex / Pinia:状态管理
  • Vue DevTools:开发调试工具

UI 组件库

  • Element UI/Plus:桌面端
  • Vant:移动端
  • Quasar:跨平台

8. Vue 2 vs Vue 3 主要差异

特性Vue 2Vue 3
APIOptions APIComposition API + Options API
响应式Object.definePropertyProxy
TypeScript支持一般原生支持
性能较好更优秀
包体积较大更小

9. 优势

学习曲线平缓 - 容易上手,文档友好 渐进式 - 可以逐步采用,不需要重写项目 性能优秀 - 响应式系统高效 开发体验好 - 模板语法直观,调试方便 中文社区活跃 - 作者是华人,中文资料丰富