vue不能检测到通过索引值设置某一项?

来源:4-3 响应式对象(下)

小郎Lie

2019-05-07

将data变为响应式的时候,如果遇到数组是会遍历每一个元素并将其定义为响应式的

observeArray (items: Array<any>) {
    for (let i = 0, l = items.length; i < l; i++) {
      observe(items[i])
    }
  }

官方文档里面写的下面这句是不是有问题?

图片描述
实际情况是

// 如果items = ['a', 'b', 'c']
vm.items[1] = 'x' // 不是响应性的
// 如果items是一个对象数组 items = [{a: 1}, {a: 2}]
vm.items[0].a++ // 是响应式的
vm.items[0] = {a: 2} // 不是响应式的

感觉源码这里对数组的深层遍历不是很必要

写回答

1回答

ustbhuangyi

2019-05-07

如果没有遍历去 observe,你举的例子
// 如果items是一个对象数组 items = [{a: 1}, {a: 2}]
vm.items[0].a++ // 是响应式的
如何是响应式的呢?

0
2
ustbhuangyi
回复
小郎Lie
数组元素为啥不需要是响应式的呢,你在模板中也可能仅仅使用数组中的某个元素呀
2019-05-08
共2条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程