vue methods、计算属性、watch

140 阅读1分钟

一、methods(方法调用) 和 计算属性区别

1. methods

没有缓存,页面多次调用这个函数就会运行多少次,性能消耗大(计算结果一般不用方法调用)。

2. 计算属性

有缓存,页面多次调用这个属性,只会执行一次,只有它依赖的数据发生变化才会重新计算,有一定的惰性,性能高。:必须用 return 返回结果

区别

image.png

 <div v-for="item in produc" :key="item.id" class="produc">
<!-- key的作用:标识,数据发生变化时会根据【新数据】和【新的虚拟DOM】进行虚拟DOM算法,vue内部使用提高效率,注意:如果不写key,vue会自动将index作为唯一标识-->
  <span>价格{{ item.price }}</span>
  <span>数量{{ item.num }}</span>
  <span>总价{{ toprice(item.price, item.num) }}</span>//methods 里写的
  <span>总价{{ toprices }}</span>//计算属性
</div>
computed: {
   toprices() {
      //计算属性会有缓存 所有的价格都是 40
      for(let key of this.produc){
          return key.price * key.num
      }
    },
},
methods: {
    toprice(p, n) {
      return p * n;
    },
},

二、计算属性和watch区别

计算属性能完成的操作,watch 一定能完成,但watch能完成的操作,计算属性不一定能完成(比如:异步)

1、watch

不支持缓存,监听到数据直接触发、支持异步和开销较大的操作

语法:

watch: {
   
    weather: {
      immediate:true//组件加载时立即触发
      deep: true,//深度监听
      //weather发生改变时调用handler
      handler(newvalue, oldvalue) {
        if (newvalue === true) {
          console.log(123456);
        }
        console.log(newvalue, oldvalue);//根据变化前后的值做操作
      },
    },
}