Vue2 - 23-03-20
First Post:
Last Update:
Last Update:
Vue2 - 23-03-20
key的作用与原理
- 如果使用的是生成的索引作为key,破坏key与index的顺序之后,虚拟dom会根据diff算法(对比算法),保留原有key上面的东西,造成顺序混乱
- key为p.id的时候,会根据唯一标识ID进行对比
- 没有书键入key的时候默认会生成index为key
如果数据是从后方插入的时候就不会出现下面问题
1 | <!DOCTYPE html> |
列表过滤及排序
- 过滤
list.filter((listItem)=>{ return listItem.indexOf(keyword) !== -1 })
1 | <!DOCTYPE html> |
- 排序
升序:const arr = [1,5,3];arr.sort((a,b)=>{ return a-b })
=>[1, 3, 5]
降序:const arr = [1,5,3];arr.sort((a,b)=>{ return a-b })
=>[5, 3, 1]
1 | <!DOCTYPE html> |
Vue监测(侦听)数据的原理
更新时候出现的一个问题
点击按钮之后,开发者工具中没有发现变化,列表也没变
Vue中数组没有getter、setter,只能通过七个变更方法才能做到响应式
Vue对被侦听的数组变更方法进行了包裹
1 | <!DOCTYPE html> |
模拟监测的实现
为了响应式,Vue实例将data的东西交给Observer进行处理,然后再给了一份vm._data,一份data
这里模拟了加工的实现
1 | <!DOCTYPE html> |
数据在Vue实例通过Observer进行的对data处理之后会同时赋值给data、vm._data
getter、setter是为了响应式而生;
数据代理中我认为代理商就是getter和setter,vm的属性来自他们而不是直接读取从vue实例拷贝过来的_data;
Vue.set,添加一个响应式属性
只能给data里面的某一个对象追加属性,不能是直接给vm(vue实例的data)追加
X没有响应式:vm._data.student.gender = ‘男’
详见文档->Vue.setVue.set( target, propertyName/index, value )
Vue.set(this.student,'gender','男')
this.$set(this.student,'gender','男')
演示:
1 | <!DOCTYPE html> |
Vue监测数据改变的原理
1 | <!DOCTYPE html> |