Vue.js的computed和watch属性详解

 
更多

在Vue.js中,computed和watch是两个重要的属性,它们用于监听数据的变化,实现响应式的界面更新。本文将详细介绍computed和watch的使用以及它们的区别。

computed属性

computed属性是一种计算属性,它是根据现有的数据派生出来的新的数据。computed属性可以根据它所依赖的数据自动更新,只要依赖的数据发生变化,computed属性就会重新计算。

使用方法

在Vue实例的computed选项中定义computed属性。例如,我们有一个对象person,它有firstNamelastName两个属性,我们想要根据这两个属性的值计算出fullName属性,可以这样定义computed属性:

computed: {
  fullName() {
    return this.person.firstName + ' ' + this.person.lastName;
  }
}

在模板中使用computed属性的时候,可以像使用普通属性一样使用它:

<p>{{ fullName }}</p>

计算属性的缓存

计算属性的一个重要特点是它们是缓存的,也就是说在依赖的数据不变的情况下,多次读取computed属性,只会执行一次计算。

计算属性的缓存失效

如果computed属性所依赖的数据发生变化,那么computed属性会重新计算。Vue.js会智能地判断computed属性的依赖关系,只重新计算相关的computed属性,而不是重新计算所有的computed属性。

watch属性

watch属性用于监听数据的变化,并在数据发生变化后执行相应的操作。与computed属性不同,watch属性用于监听一个或多个具体的数据,而不是派生出新的数据。

使用方法

在Vue实例的watch选项中定义watch属性。例如,我们有一个数据count,我们希望在count发生变化后执行一些操作,可以这样定义watch属性:

watch: {
  count(newValue, oldValue) {
    // 在count发生变化后执行的操作
  }
}

watch属性的值是一个对象,对象的键是要监听的数据的名称,值是一个函数,用于处理数据变化后的操作。函数接收两个参数,变化后的值和变化前的值。

深度监听

默认情况下,Vue.js只会监听这个对象的引用的变化。如果想要深度监听对象的属性,可以使用deep选项:

watch: {
  obj: {
    handler(newValue, oldValue) {
      // obj对象发生变化后执行的操作
    },
    deep: true
  }
}

立即执行

默认情况下,Vue.js在监听到数据变化后会稍等一段时间(默认是异步的)再执行watch属性中的操作。如果希望在数据变化后立即执行操作,可以使用immediate选项:

watch: {
  count: {
    handler(newValue, oldValue) {
      // 在count发生变化后立即执行的操作
    },
    immediate: true
  }
}

computed和watch的区别

  • computed属性是根据现有的数据派生出来的新的数据,它会根据数据的变化自动更新,而watch属性是用于监听具体的数据,当数据发生变化后执行相应的操作。
  • computed属性是缓存的,只有在依赖的数据发生改变时才会重新计算,而watch属性没有缓存机制,每次数据变化都会执行相应的操作。
  • computed属性适用于依赖其他数据的计算操作,而watch属性适用于对某些数据的变化做出反应。

总结一下,computed属性适用于计算派生的数据,而watch属性适用于监听具体数据的变化。根据需求选择使用computed还是watch,可以让我们更好地实现响应式的界面更新。

以上就是对Vue.js的computed和watch属性的详细介绍。希望本文能对你理解这两个属性有所帮助。谢谢阅读!

打赏

本文固定链接: https://www.cxy163.net/archives/9410 | 绝缘体

该日志由 绝缘体.. 于 2018年05月04日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Vue.js的computed和watch属性详解 | 绝缘体
关键字: , , , ,

Vue.js的computed和watch属性详解:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter