-1

我一直想问以下关于 Vue Reactivity System 的问题。

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

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

我还有另一个关于 Vue Reactivity System 的问题。

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

非常感谢!

4

1 回答 1

0

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

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

于 2018-09-04T20:18:53.690 回答