Vue(读音 /vjuː/,类似于 view)是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。
在讨论 Vue 之前,我们先搞清楚它到底解决了什么问题。
前端开发的核心任务是将数据展示给用户,并响应用户的操作。在传统的开发模式下,我们需要:
这种方式在小型项目中还算可控,但随着项目规模增长,代码会变得难以维护。
传统方式的痛点
var count = 0
var countEl = document.getElementById('count')
var btnEl = document.getElementById('btn')
countEl.textContent = count
btnEl.addEventListener('click', function() {
count++
countEl.textContent = count
})
当数据变多、交互变复杂时,这种代码会变成"面条代码"。
Vue 的解决方案是:让数据和视图自动同步。你只需要关注数据的变化,视图会自动更新。
Vue 的设计灵感来自 MVVM(Model-View-ViewModel)模式:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Model │◄──────►│ ViewModel │◄──────►│ View │
│ (数据) │ │ (Vue) │ │ (视图) │
└─────────────┘ └─────────────┘ └─────────────┘
data在 Vue 中,ViewModel 是核心。它通过数据绑定将 Model 的变化自动反映到 View,通过DOM 监听将 View 的变化自动更新到 Model。
<div id="app">
<input type="text" v-model="message">
<p>你输入的是:{{ message }}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello'
}
})
</script>
这个例子展示了 Vue 的核心功能:
v-model 指令实现了输入框和数据的双向绑定{{ message }} 插值表达式将数据显示在页面上message 自动更新,页面显示也随之更新了解 Vue 不是什么,同样重要:
Vue 只关注视图层,不提供路由、状态管理、HTTP 请求等功能。这些功能由官方维护的配套库(Vue Router、Vuex、axios)提供。
jQuery 是一个 DOM 操作库,Vue 是一个构建界面的框架。它们解决的问题不同,可以在同一个项目中使用(虽然不推荐)。
React 是一个库,Vue 是一个框架。React 更灵活,Vue 更开箱即用。选择哪一个取决于团队偏好和项目需求。
本教程基于 Vue 2.x 版本。Vue 2 和 Vue 3 的主要区别:
| 特性 | Vue 2 | Vue 3 |
|---|---|---|
| 响应式原理 | Object.defineProperty | Proxy |
| 组合方式 | Options API | Composition API |
| 性能 | 较好 | 更好 |
| TypeScript 支持 | 一般 | 原生支持 |
| 生命周期 | beforeDestroy | beforeUnmount |
虽然 Vue 3 已经发布,但 Vue 2 仍然被广泛使用,很多现有项目仍在 Vue 2 上运行。学习 Vue 2 的知识对于维护这些项目非常重要。
Vue 是一个渐进式 JavaScript 框架,核心特性是响应式数据绑定和组件化。它让开发者可以专注于业务逻辑,而不是手动操作 DOM。在接下来的章节中,我们将深入学习 Vue 的各项功能。