vue的computed是什么时候执行的
-
vue的computed是在以下情况下执行的:
-
初始执行:当组件创建时,computed属性会立即执行一次,将结果缓存起来。
-
依赖改变时执行:computed属性会自动追踪它所依赖的数据(响应式依赖),当依赖的数据发生变化时,computed属性会重新计算。
-
手动触发执行:除了自动追踪依赖的数据变化,我们也可以在需要的时候手动触发computed属性的执行,通过调用该属性的方法来实现。
需要注意的是,computed属性会做缓存处理,只有当依赖的数据发生变化时,computed属性才会重新计算。这样可以避免不必要的计算,提高性能。同时,computed属性的结果是响应式的,当依赖的数据发生变化时,依赖computed属性的地方也会相应地更新。
综上所述,computed属性在组件创建时会立即执行一次,在依赖改变时自动执行,并且可以手动触发执行。它能够方便地根据依赖的数据动态计算出属性的值,并且保持与数据的同步。正确使用computed属性可以简化组件的逻辑,提高代码的可读性和可维护性。
2年前 -
-
Vue中的computed属性是在以下情况下被执行的:
-
初始化阶段:在Vue实例被创建时,computed属性会立即被计算一次。这是为了确保初始状态的值是正确的,并且可以响应式地追踪依赖关系。
-
监听依赖属性发生变化时:computed属性会监视依赖的响应式属性,当这些属性发生变化时,computed属性会被重新计算。Vue使用了响应式系统来跟踪属性的变化,一旦依赖的属性发生了变化,computed属性就会被标记为“脏”,在下一次访问时重新计算。
-
手动调用:我们可以在Vue实例或组件的方法中手动调用computed属性,以获取其计算结果。当我们需要在特定的时机获取最新的计算结果时,可以主动调用computed属性。
-
依赖属性被watcher订阅时:computed属性本质上是一个特殊的getter函数,在被访问时,会创建一个与之关联的侦听器(watcher),该侦听器将依赖的响应式属性添加到其依赖列表中。一旦依赖属性发生变化,侦听器就会通知computed属性进行重新计算。
-
依赖属性发生变化被异步调度:Vue的响应式系统在处理依赖属性变化时是异步的,即依赖属性变化不会立即触发computed属性的重新计算。相反,Vue会将这些变化收集起来,并在下一个事件循环周期中进行批处理。这样做是为了减少计算的次数,提高性能。
总之,computed属性在初始化阶段被计算一次,然后根据其依赖的属性的变化情况进行动态计算,并根据需要进行手动调用。这使得computed属性能够自动缓存计算结果,当依赖属性没有发生变化时,不会重复计算,提高了性能和效率。
2年前 -
-
Vue的computed是在Vue实例中,通过声明式的方式定义计算属性的,它的执行时机是当该计算属性被访问时才会进行执行。Vue会根据计算属性的依赖关系进行缓存,并且只有在依赖的数据发生改变时才会重新计算。
下面是computed的执行流程:
- 定义计算属性:在Vue实例中,通过computed属性定义计算属性。例如:
new Vue({ data: { name: 'John', age: 18 }, computed: { fullName: function() { return this.name + ' Doe'; }, adult: function() { return this.age >= 18; } } })- 访问计算属性:当我们在模板中或者在Vue实例中访问计算属性时,computed的getter方法会被调用,返回计算属性的值。
<div> <p>Full Name: {{ fullName }}</p> <p>Is Adult: {{ adult }}</p> </div>-
依赖发生改变:当计算属性所依赖的数据发生改变时,Vue会触发重新计算,并更新计算属性的值。例如,当name或age发生改变时,fullName和adult会被重新计算。
-
缓存计算结果:computed的值会进行缓存,只有在它所依赖的数据发生改变时才会重新计算,否则会直接返回缓存的结果。这样可以避免不必要的计算,提高性能。
需要注意的是,computed属性只有在模板中使用的时候才会进行计算,而在其他非模板的javascript代码中不会进行计算。如果我们需要在Vue实例的非模板代码中使用计算属性的值,应该使用Vue实例的属性访问器(this.fullName)来获取计算属性的值。
2年前