Vue中watch和computed 都可以用作数据的监听功能,但是它们也有区别,下面分别介绍这两个函数的使用方法和区别。它也是vue面试可能问到问题之一。

watch

vue中watch用于监听数据的响应变化,它有一个回调函数,同参数名,当数据变化时,会触发这个回调函数,我们可以在回调函数中处理我们的业务逻辑。例子:

<template>
  <div>
    <h2>欢迎首页</h2>
    <div>请输入用户名<input type="text" v-model="username"/></div>
    <div>旧值和新值:{{ usernameVal }}</div>

  </div>
</template>

<script>
export default {
  name: "HomeIndex.vue",
  data() {
    return {
      username: '',
      usernameVal: ''
    }
  },
  watch: {
    //监听数据的变化,可以获取数据变化前后的值
    username: function (oldUsername, newUsername) {
      this.usernameVal = oldUsername + "__" + newUsername
    },
  },
  methods: {

  }
}
</script>

<style scoped>

</style>
输出:

Vue中watch和computed使用和区别

computed 

computed是指页面中某些属性依赖其它的属性变动的时候使用computed ,比如购物车功能,有商品1和商品2,那么合计总的数量就依赖于商品1和商品2的数量。

例子:

<template>
  <div>
    <h2>购物车</h2>
    <div>商品1<input type="text" v-model="num1"/></div>
    <div>商品2<input type="text" v-model="num2"/></div>
    <div>总量:{{ totalNum }}</div>

  </div>
</template>

<script>
export default {
  name: "HomeIndex.vue",
  data() {
    return {
      num1: 0,
      num2: 0
    }
  },
  computed: {
    //总量依赖于商品1和商品2的数量
    totalNum: function() {
       return parseInt(this.num1) + parseInt(this.num2)
    },
  },
  methods: {

  }
}
</script>

<style scoped>

</style>

Vue中watch和computed使用和区别

上面的例子中totalNum 依赖于num1和num2数量,所以使用computed 

区别

  • 返回值: watch没有返回值,computed有返回值。
  • 功能:    watch用于监听数据的变化,computed用户计算。
  • 缓存:    watch每次监听的值发生变化时候都会调用回调,computed会调用缓存。
  • 异步:    watch可以有异步,computed函数不能有异步。