【vue高频面试题—基础篇】:vue中 computed 和 watch 和 methods的区别

156 阅读3分钟
  1. 计算属性(Computed)

    • 定义和作用

      • 计算属性是基于它们的依赖进行缓存的。一个计算属性只有在它的相关依赖发生改变时才会重新求值。例如,有一个计算属性fullName,它依赖于firstNamelastName。当firstNamelastName发生变化时,fullName会重新计算。

      • 计算属性通常用于对多个数据进行处理并返回一个结果。例如:

var vm = new Vue({
  el: '#app',
  data: {
    firstName: 'John',
    lastName: 'Doe'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName;
    }
  }
});
  • 使用场景

    • 当需要对数据进行一些复杂的逻辑处理来得到一个新值,并且这个新值依赖于现有的数据,同时希望在依赖数据不变时避免不必要的重复计算时,就适合使用计算属性。比如根据商品的单价和数量计算总价,总价会随着单价或数量的改变而重新计算,但单价和数量不变时,总价不需要重新计算。

  1. 侦听属性(Watch)

    • 定义和作用

      • 侦听属性用于观察和响应数据的变化。当被监听的数据发生变化时,对应的处理函数就会执行。例如,有一个watch监听city变量:

var vm = new Vue({
  el: '#app',
  data: {
    city: 'New York'
  },
  watch: {
    city: function (newVal, oldVal) {
      console.log('City changed from ' + oldVal + ' to ' + newVal);
    }
  }
});
  • 使用场景

    • 当需要在数据变化时执行异步操作或者开销较大的操作时,适合使用侦听属性。例如,当用户选择的城市发生改变时,需要向服务器请求该城市的天气数据,这种情况下使用watch来监听城市数据的变化是合适的。

  1. 方法(Methods)

    • 定义和作用

      • 方法是定义在methods中的函数,在模板中可以通过v - on指令来调用。每次调用方法时,方法内的代码都会执行。例如:
var vm = new Vue({
  el: '#app',
  data: {
    count: 0
  },
  methods: {
    increment: function () {
      this.count++;
    }
  }
});
  • 使用场景

    • 方法通常用于定义事件处理函数,比如按钮点击事件、表单提交事件等。当需要执行一些操作,如改变数据、触发动画等操作时,可以定义方法来实现。例如,点击按钮增加一个计数器的值,这种与用户操作直接相关的场景就适合使用方法。

  1. 区别总结

    • 缓存机制

      • 计算属性有缓存,只有依赖的数据发生变化时才会重新计算;而方法每次调用都会执行函数内的代码;侦听属性本身不涉及缓存,主要关注数据变化的响应。
    • 使用目的

      • 计算属性用于根据已有数据计算得出新的数据;侦听属性用于在数据变化时执行特定的操作,特别是异步或复杂操作;方法用于定义操作行为,多与用户交互事件相关。
    • 模板中的调用方式

      • 在模板中,计算属性像数据属性一样直接使用(如{{ fullName }});方法需要通过v - on等指令调用(如<button v - on:click = "increment">Increment</button>);侦听属性不在模板中直接调用,而是自动响应数据变化。