Vue2知识总结(续)

97 阅读2分钟

前段时间总结了一些vue框架相关的知识点,今天继续更新一些传送门:vue知识总结

1、key属性为什么不能使用索引

key属性是用来标记dom节点或组件的,在使用v-for遍历数组时要添加一个key属性,key属性主要用在vue的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes,而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。若使用索引作为key值,通过数组的方法删除中间的一个元素,实际效果会是最后面一个元素被移除了。

2、计算属性computed和watch有什么区别

computed:可以一次监听多个属性的改变,可以被缓存,当它的依赖不改变时不会重新计算;不能做复杂的运算,需要return;有get和set方法。
watch:一次只能监听一个属性的变化,当需要监听一个对象的属性的变化的时候设置deep:true实现深度监听,当要实现监听多个属性时可以先用计算属性,再监听这个计算属性。

注:computed和methods里面方法的区别在于是否可以传参。

3、vue的响应式原理

vue2采用数据劫持结合发布-订阅者模式的方式,通过Object.defineProperty对data里面的属性进行数据劫持,设置setter和getter函数,在数据变动的时候,触发set方法,检测到数据发生变化,会发布消息给订阅者,触发相应的监听回调,交给依赖收集器Dep,再由Dep统一进行diff,生成新的虚拟DOM树,视图达到更新。
Object.defineProperty的缺点是:无法响应对象属性上的引用类型的增加和删除。无法监听通过索引修改数组。可以使用$set()$delete().
vue3通过proxy实现数据响应式。

4、v-model的原理

v-model是表单数据的双向绑定,本质上是v-bind:value@input的语法糖,在input事件的回调函数中将e.target.value赋值给与value绑定的数据。在表单元素的type为radio或checkbox时是v-bind:checked@check的组合。

5、vue2生命周期函数

4个阶段:初始阶段(creat)、挂载阶段(mount)、更新阶段(updata)、销毁阶段(destroy)
8个钩子函数: beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed
在使用动态组件时有2个钩子函数:activateddeactivated
1个特殊的:- errorCaptured

在mounted函数里面一般做dom操作、ajax请求(也可以在created)、echarts图标;