响应式系统:正确操作数据层(M层),视图层(V层)会发生变化,会响应。但是如果出现一些非法操作,M层发生变化,但V层不响应,下面我们就说说有哪几个情况
1. 对数组使用了非变异方法
修改了原数组:变异
没有修改原数据,而是返回了新数组:非变异
有哪些数组方法式非变异方法呢?
有:arr.map() , arr.filter() , arr.slice() , arr.concat
2. 修改了数组的长度
3.修改了数组根索引上的值 (根索引) arr[0]
4. 给对象添加了不存在的属性
建议:不要修改数组的根键,不要修改数组的长度,数据一开始都要声明在data选项内部,不要对数组使用非变异的api
如果不小心使用了,想偷懒,有以下几种解决方法,但是建议不要偷懒!!!
1. Vue.set(数组|对象, index, value)
2. vm|this.$set(对象, key, value)
3. this.$forceUpdate() 强制刷新
4. this|vm.$mount('#app') 再次获取元素,将元素的的html内容替换掉
哪些数组的方法时响应式的
-
push() 在数组后面添加元素
-
pop() 删除数组中的最后一个元素
-
shift() 删除数组中的第一个元素
-
unshift() 在数组最前面添加元素
-
sort()
-
reverse()
-
splice(start) start 从哪个元素开始删除/插入/替换元素
-
删除元素 :第一个参数: start 从哪个元素开始 ;第二个参数,删除几个元素(如果没有传,就删除后面的所有元素) 没有第三个参数,
-
插入元素:第一个参数: start 从哪个元素开始 ;第二个参数传入0,并且后面跟上要插入的元素
-
替换元素:第一个参数: start 从哪个元素开始 ;第二个参数表示要替换几个元素 后面式要替换的元素
-
本文讨论了Vue中导致响应式系统失效的情况,包括使用非变异数组方法、修改数组长度、改变数组根索引上的值以及向对象添加新属性。建议避免这些操作,并给出了如Vue.set、$set、$forceUpdate等解决方案。同时列举了Vue中响应式的数组方法,如push、pop、shift、unshift等。
397

被折叠的 条评论
为什么被折叠?



