Vue.js 3.x+Element Plus前端开发实战
上QQ阅读APP看书,第一时间看更新

1.1 简单认识Vue

1.首先,Vue是一款MVVM框架。

所谓MVVM,即Model-View-ViewModel,即模型-视图-视图模型模式。

熟悉MVC的读者可能知道,MVC是模型-视图-控制器(Model-View-Controller)模式,在早期曾广泛应用于Web架构中。其中Model(模型层)指的是业务模型,用于计算、校验、处理和提供数据,不直接与用户产生交互;View(视图层)是用户可以看到并进行交互的界面,比如浏览器网页;Controller(控制器层)则负责收集用户输入的数据,并向相关模型请求数据并返回相应的视图来完成交互请求。这种模式在早期的JSP、PHP应用中广泛使用,此时前后端的耦合度还是相当高的,用户界面的数据还是由后端生成,在前端页面也可能出现后端代码。随着前端技术的发展,MVVM模式的诞生促进了前后端的分离解耦。

MVVM是MVC的变种,Model和View与MVC模式一致,ViewModel(视图模型层)作为View和Model沟通的桥梁,封装了界面展示和操作的属性和接口等,可以将Model数据的变化实时反映到View上,又可以监听View的变化,在需要的时候更新数据。Vue的MVVM模式如图1.1所示。

图1.1 Vue的MVVM框架示意图

● View(视图层):在前端开发中通常来说是DOM层,是用户看得到的界面。

● Model(模型层):也称数据层,是来自服务器请求或固定的一些死数据。

● ViewModel(视图模型层):实现了数据绑定(Data Bindings),可以在Model层数据发生变化时将变化反映到View上。用户与View进行交互时,ViewModel层又可以通过监听DOM事件的变化,将监听到的变化反映给Model。

由于Vue使用MVVM的这些特性,将前端开发者以前常用的操作变化封装成了一个框架,前端开发者使用Vue这样的框架,便可以不再需要花费大量时间操作DOM来保持视图和数据的统一,只需要关注业务数据的变化,因此代码变得结构清晰并且更加易于维护。

MVVM中的组件化是一个重要特点。从MVVM模式中去掉M,剩下的VVM便是一个组件,组件化将可重用的部分封装起来,方便了代码的复用,使得前端代码变得简洁而逻辑清晰。因此,使用Vue的组件化开发使得开发的代码量大大减少,这也是这个框架备受青睐的原因之一。

2.其次,Vue采用虚拟DOM技术解决浏览器的渲染性能问题。

传统开发模式上,JS操作DOM时,浏览器会马上从构建DOM树开始从头到尾执行一遍流程,DOM有多少次变化就直接执行多少次流程,性能消耗巨大,虽然硬件条件或浏览器在不断地更新迭代,当频繁操作DOM树后,还是有可能出现页面卡顿或崩溃的现象。

而采用虚拟DOM技术时,当虚拟节点准备映射到视图的时候,为了避免额外的性能开销,会先和上一次的虚拟DOM节点树进行比较,最后只渲染不同的部分到视图中,无须改动其他的节点状态,因此节省了节点的操作,从而优化了页面渲染的效率。

3.再次,Vue是一个响应式框架。

响应式的数据渲染是现代前端非常重要的机制。所谓响应式,是指当数据改变后,Vue会通知使用该数据的代码,从而改变所有使用到该数据的数据,进而使关联对应数据的视图自动更新。例如,视图中使用数据a、b、c,其中b和c是根据a计算出来的两个数据,通过一些操作,比如单击某个按钮使a的值改变了,比如a增加1,那么视图上使用的a马上也增加1,同时数据b和c也更新了数据并表现在视图上。

4.另外,Vue 3.x的组合式API解决功能分散、难以维护的问题。

Vue 3支持采用选项式API,通过props、data、methods等相关配置来组织功能逻辑,使用非常简单,易于理解,然而当组件内容越来越多,逻辑越来越复杂的时候,使用选项式API的弊端就会非常明显,因为所有配置都在选项中,相同的功能模块分散混合在一个文件里面,其可读性就会降低,并且难以维护。

所以Vue 3新增了组合式API语法,可以将不同的功能分开管理,将同一个功能点的内容从选项式配置中抽离出来放到一起,最后通过setup方法统一调用。这样大大地增加了代码的可读性,并且在变更功能内容时,很容易就能找到对应的模块来修改,大大提升了代码的可维护性。

5.最后,Vue是一个轻量级的渐进式框架。

因为Vue的核心层只关注视图,其他功能可以根据需要逐步引入,所以Vue的核心文件是非常小的,它是一个轻量级的框架,而新版本Vue 3更是对目前已经非常稳定成熟的Vue 2进行了优化,用TypeScript辅以组合式API,提升了整体性能以及代码的可读性和可维护性,源码阅读者也非常容易学会这个框架的精髓,开发者也非常容易入门。

所谓渐进式,便是说开发者可以逐步地使用Vue的功能,可以快速地与第三方库或既有项目整合,既可以在老项目中将Vue作为应用的一部分嵌入其中,或者使用Vue替代老的框架,如jQuery,也可以在新项目的初期使用Vue的有限功能,后续如果希望将更多的业务逻辑使用Vue实现,那么Vue的核心库及其生态系统(如Vue+Vue-Router+Vuex)可以满足各式各样的需求。