Open 374632897 opened 7 years ago
工程中遇到一个问题,问题是这样的,
组件结构 A(父) B(子) C(孙) 层级描述 变量mapstyle({layers:[{},{},{}],···})存在vuex中,在B里取vuex中mapstyle中layers v-for 渲染组件C, 数据变化 在A中改变mapstyle.layers,使用push时组件C能正确渲染,使用splice增加组件C不能渲染不正确。两种情况组件B渲染都是正确的,同时组件C里断点只进去了一次,取的是layers中最后一个数据进行渲染。
求解答呀,多谢多谢
@pengchangjiang 我已经没用 Vue 很久了哈, 你在使用这两种方法改变后, 在 Vuex 的 store 里面对应的数据是一样的吗?
vuex store里面的值是一样的
Vue 的 Observer
可以在Vue 官方文档看到对于响应式的描述。
数组
监测范围:数组的
push,pop,shift,unshift,splice,sort,reverse
操作。 具体代码:通过
Object.create(Array.prototype)
, 得到一个从数组构造函数的原型对象上继承后的对象, 然后对这个继承后的构造函数的指定方法进行重新定义。这里最重要的就是 protoAugment 方法, 它的作用是重写一个实例的
__proto__
属性。 在监听数组的时候, 默认情况下数组的__proto__
也就是Array.prototype
, 在这个函数内部将它的__proto__
属性指向了继承自Array.prototype
并且添加了监听后的ArrayMethods
对象, 这样通过相应的方法来操作数组的时候, 就会触发其监听了。对象
监测范围: 非添加删除操作。 这个也就是通过
defineProperty
来定义的。