关于Vue反应系统的澄清

问题描述 投票:-2回答:1

我一直想问关于Vue反应系统的以下问题。

我在Vue文档中读到,建议将组件数据作为普通JS对象保留为类对象。组件数据的各个属性也是如此。

为什么这个推荐?将数据作为类对象的实例有什么问题?在组件数据中使用getter / setter和方法会导致哪些边缘情况? (这是我的主要问题)

我还有另一个关于Vue反应系统的问题。

我可以在运行时直接更改组件计算的getter / setter和方法,而不会出现Vue Reactivity System的问题吗?更改的计算getter / setter是否仍然被缓存和优化?是否可以从组件模板访问更改的方法?我可以在运行时添加新的计算getter / setter和方法吗?怎么样?

非常感谢你!

vuejs2 vue-reactivity
1个回答
0
投票

Vue反应系统(但我想我可以将它扩展到所有其他反应框架/ lib /无论如何)只是observer pattern的一个实现。在特定情况下,当属性值(数据,计算的getter结果,vuex状态)改变时,将触发观察者函数。如果属性是一个整数并且它的值是2,那么vue很容易检查出它在某个时间点变为'3',经过比较后,用mutationvdom change等触发...这是与其他原始类型相同。当结构化对象发挥作用时,仍然会进行值之间的比较,但这次该值将是对象的引用。如果引用没有改变,vue不能知道某些东西已经改变,所以只是没有反应....

如果之前设置val [3] ='foo'并且val [3] ='bar'之后,'val'数组仍然是同一堆区域中的同一个对象,那么你应该克隆它,或者更好地使用Vue.set()

© www.soinside.com 2019 - 2024. All rights reserved.