我对vue的简单理解
vue作为一种mvvm视图层框架,比起同样mvvm的react和mvc的angular以及其他的框架来说,学习成本是最低的,这也是vue的魅力之一。
正是因为简单,大大的降低了学习前端项目开发的门槛,对转行人士或者后端想学前端的开发者来说都非常的友好。
什么是MVVM
背景:
- web1.0-2.0时期,页面只是静态渲染,更新需要依赖于手动操作dom,比如JQ;
- web2.0时期,框架出现,数据驱动(vue的MVVM,react的setState)代替过去;
mvvm的解释:
- M:
model
,数据层,比如data中的数据,vuex数据等,基本都是后端提供的。 - V:
view
,dom视图层,也就是用户界面。 - VM:
viewModel
,视图数据层,通过数据层的数据的处理(例如dom监听,vue指令等),生成用于视图层展示的数据模型,也能通过视图层用户的交互,改变数据层的数据模型。
VM层既连接着M和V,又将二者解耦,开发者只需要关心M和V层,不需要再像过去一样为两边的数据处理而亲力亲为。
vue的特点
- 是一个生态,一个渐进式框架;
- 相较于其他框架,更加轻量,使用gzip压缩能小到20kb;
- 响应式的更新机制;
- 学习门槛低;
- 以数据为中心,数据驱动的开发思维;
- 完全的组件化开发;
- 等等;
其中最核心的三大特点是必须记住的:
- 响应式
- 采用了vdom
- 模板编译
与js原生开发
在项目制作的场景下,js的原生开发并不是完全优于框架开发:
- 原生开发操作dom十分繁琐,而且dom的获取和操作的性能很差,也没有虚拟dom的算法,当dom数量大的时候会导致大量的重绘和重排,这点框架都处理好了;
- 原生js开发采用模块化的开发方式,当项目庞大时,也很容易造成污染,且代码复用率低。框架由于组件化的开发逻辑,代码颗粒度更加细腻,可以把html、css、js拆的很细;
- 框架生态丰富且发展的非常迅速,各种技术栈的支持非常友好,项目搭建也快速高效;
- 原生js开发采用的是命令式编码,框架是声明式编码。命令式就是你的每次操作都要亲力亲为,声明式就类似你每次声明一个操作,框架就帮你去做了,你不用关系中间的步奏是怎么样的;
- 框架的移动端开发支持更加友好,例如react Native;
- 更能够应对复杂的页面等等
所以在制作项目中,框架的优点绝对是超过原生开发的,历史的进程与未来的发展就是最好的证明
注意点
在vue中开发时一些注意事项,在面试中有可能会这么问【你在使用vue过程中遇到过哪些坑】
这个题目我认为问的形式不对,问的不是设计缺陷,而是一些注意事项或者一些场景问题。
-
缓存泄漏问题。在组件销毁阶段应该要注意清除。
-
响应式监听的缺陷(这种才是真的缺陷)
-
从页面a滚动到中间,进入页面b再返回页面a,直接回到顶部(1. 可以记录a页面的位置信息 2. keepalive实现3. app混合开发的可以用MPA+App WebView技术,让a和b页面成为栈式堆叠结构,a永不销毁)
-
模板中对某个特定数据用函数去处理后return显示,会出现不断更新的死循环,用计算属性代替(这个可以不说)。
-
旧版本的v-if和v-else底层没有绑定key导致,v-if标签上绑定的属性跑到v-else标签上。
-
基本上可以随便扯哈哈,例如和性能相关的。