我一直想问有关Vue反应系统的以下问题。
我在Vue文档中已经读到,建议将组件的数据保留为普通的JS对象,而不是类对象。组件数据的各个属性也是如此。
为什么提出此建议? 将数据作为类对象的实例有什么问题? 哪些极端情况是由于在组件数据中使用getter / setter和方法引起的? (这是我的主要问题)
我还有关于Vue反应系统的另一个问题。
我可以在运行时直接更改组件计算的获取器/设置器和方法,而不会遇到Vue Reactivity System问题吗? 更改后的计算获取器/设置器是否仍被缓存和优化? 是否可以从组件模板访问更改的方法? 我可以在运行时添加新的计算的getter / setter和方法吗?怎么样?
非常感谢您!
答案 0 :(得分:0)
Vue反应性系统(但我想我可以将其扩展到所有其他反应性框架/ lib /任何东西)只是observer pattern的实现。在特定情况下,当属性值(数据,计算的吸气剂结果,vuex状态)发生更改时,将触发观察器函数。如果该属性是整数并且其值为2,则在比较之后,用mutation,{{3}触发,很容易vue可以检查出它在某个时间点已变为'3'。 }等,其他基本类型也是如此。当结构化对象开始起作用时,仍然会在值之间进行比较,但是这次值将是对该对象的引用。如果引用没有更改,vue将无法得知某些内容已更改,因此就不会做出反应。...
如果在val [3] ='foo'之前设置val [3] ='bar'之后,则'val'数组在同一堆区域中仍是同一对象,因此应该对其进行克隆,或者更好使用vdom change