Vue的基础认知
什么是MVVM
全拼是Model-View-ViewModel。
ViewModel是view和Model的中间件,向上与view进行双向数据绑定,向下与model通过接口请求进行数据交互,承上启下。
Vue的生命周期
- 什么是生命周期
vue实例有一个完整的生命周期,从开始创建、初始化数据、编译模板、挂载DOM,然后渲染->更新->渲染,最后卸载,这一系列过程称之为vue的生命周期。
每个组件或实例都会经历一个完整的生命周期。 - 生命周期的作用
生命周期中有多个事件钩子,让我们在控制整个 vue 实例的过程时更容易形成好的逻辑。 - 生命周期共有几个阶段
共分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/后。- 创建前beforeCreate:实例被创建后的第一个钩子,开始初始化事件和生命周期,但还没有data、methods、computed、watch属性;
- 创建后created:完成数据挂载、事件绑定等
- 载入前beforeMount:编译模板准备渲染,这个钩子是最后一次更改数据的机会;
- 载入后mounted:将编译完成的模板挂载到页面中,真正的DOM挂载完毕,数据完成双向绑定。平时使用最多的函数,异步请求。在这个阶段,数据和DOM都已被渲染出来了;
- 更新前beforeUpdate:响应式数据发生变化,更新data值,但还没更新到页面中;
- 更新后updated:将data中的值更新到页面中;
- 销毁前beforeDestroy:在销毁之前实例仍然可以使用,$destroy方法可以销毁当前组件,做一些善后工作;
- 销毁后destroyed:销毁后解绑所有东西,移除事件监听,实例等。
- 页面第一次加载会触发哪些钩子?
第一次加载会触发 beforeCreate、created、beforeMount、mounted。 - DOM渲染在哪个周期中已经完成
DOM渲染在mountend - 接口请求一般放在哪个生命周期中?
mounted中,但注意服务器渲染时不支持mounted,需要放在created、beforeMounted中 - 具体讲述每个周期适合哪些场景:
beforecreate : 可以在这加个loading事件,在加载实例时触发。
created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用。
mounted : 挂载元素,获取到DOM节点。
updated : 如果对数据统一处理,在这里写上相应函数。
beforeDestroy : 可以做一个确认停止事件的确认框 nextTick : 更新数据后立即操作dom。 - created 和 mounted 的区别:
created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。 - computed和watch的区别和运用场景
computed是计算属性,依赖其他属性值,并且computed的值有缓存,只有它依赖的值发生变化时,下一次获取computed值才会重新计算该值。
watch是监听,类似于某些数据的监听回调,每当监听的数据发生变化时都会执行回调进行后续操作。
运用场景:
1、在进行述职计算时,利用computed依赖其他数据的特性,避免获取值时都需要重新计算;
2、在数据变化时执行异步,使用watch能得到最终结果。
Vue双向绑定原理
实现数据双向绑定主要是采用数据劫持结合发布者-订阅者的方式来实现的,监听器Observe劫持并监听所有属性,若有变动则通知订阅者,每个订阅者Watcher都绑定一个更新函数,接收到属性的变化通知并执行响应的属性,从而更新视图,再通过解析器Compile,扫描解析每个节点的相关指令(v-model、v-on等),最终watch搭建observer和compile之间的通信桥梁,达到数据变化、更新视图,视图交互变化、数据model变更双向绑定效果。
vue事件绑定原理
原生事件是通过addEventListener绑定真实元素,组件事件是通过vue自定义的on-click绑定的
虚拟DOM
- 简述虚拟DOM实现原理
1、用JS模拟DOM树,并渲染;
2、比较新老DOM树,记录两者的差异;
3、最后把差异更新到真正的DOM树中。 - 虚拟DOM的优缺点
优点:保证性能下限、无需手动操作DOM、跨平台。
缺点:无法进行极致优化。
以上内容只用于对前端知识的总结,大部分内容为网络内容,仅用于借鉴参考,如有维权请留言。