未分類 21 4 月 2020 Vue 无法检测对象和数组内部的修改是 因为实现不了么 还是性能问题。 Vue 无法检测对象和数组内部的修改是 因为实现不了么 还是性能问题。 資深大佬 : xcstream 22 前排等答案。 大佬有話說 (5) 資深大佬 : kevin1 https://cn.vuejs.org/v2/guide/reactivity.html#%E6%A3%80%E6%B5%8B%E5%8F%98%E5%8C%96%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9 資深大佬 : rabbbit 因为是用 es5 的 defineproperty ()来实现的,天生有缺陷所以实现不了。它是是在每个 object 创建的时候为每个添加了 getter 和 setter,之后对 object 直接修改,自然无法进行追踪。数组的话是因为只有 push,slice 等几个有些的函数才能触发 setter 資深大佬 : renmu 没有的,检测不了你可以用$set 方法(在对象中添加数据,修改特定下标)强制触发 diff,vue 基本不依赖 react 那种不可变对象的设计 資深大佬 : murmur vue2 是用 Object.defineProperty 来进行数据劫持的。这个方法本身就不支持劫持数组,对对象也仅仅是对对象的属性进行劫持。所以 vue 内部重写了数组的那几个方法。对对象也是做了遍历去劫持每个属性。所以可以说是因为实现不了才导致了性能问题。当然 vue3 就没这个问题了。期待 ing 資深大佬 : Elephant696 懂了 vue3 可以解决这个问题