vue中的methods和computed的区别

首先问一个问题,当我们在模板中来显示一份经过对数据进行复杂计算之后的结果时,我们有两种结果方案:

  • 计算属性
  • 函数

那么我们应该如何选择呢?

  • methods定义函数,如果在模板中使用,每使用一次,就相当于调用了一次,处理逻辑会重新执行。
  • computed定义计算属性,如果在模板中使用,使用多次,但是如果依赖的数据不发生改变,计算属性对应的函数不会重新执行,计算属性会做缓存,提高渲染的性能

下面用一个案例来比较一下两者的区别

<template>
  <div id="#app">
    <p>函数{{ fn() }}</p>
    <p>函数{{ fn() }}</p>
    <p>函数{{ fn() }}</p>
    <hr />
    <p>计算属性{{ com }}</p>
    <p>计算属性{{ com }}</p>
    <p>计算属性{{ com }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num1: 10,
      num2: 100,
    };
  },
  methods: {
    fn() {
      console.log("methods中的函数被调用了");
      return this.num1 * 3;
    },
  },
  computed: {
    com() {
      console.log("computed中的函数被调用了");
      return this.num2 * 3;
    },
  },
};
</script>

<style>
</style>

效果图如下

在这里插入图片描述
对于普通的函数,在页面上用到了三次,它就会执行三次,但是计算属性就不一样,如果计算属性所依赖的数据项并没有发生变化,则就算使用多个计算函数,其函数也只执行一次, 因为它把结果缓存起来了,由于计算属性有缓存,虽然在页面上用到三次,但它的函数体只执行一次。

总结:

1.computed是响应式的,methods并非响应式。
2.computed是带缓存的,只有其引用的响应式属性发生改变时才会重新计算,而methods里的函数在每次调用时都要执行。
3.computed中的成员可以只定义一个函数作为只读属性,也可以定义get/set变成可读写属性,这点是methods中的成员做不到的
4.调用方式不一样,computed定义的成员像属性一样访问,例如上面的{{com}},methods定义的成员必须以函数形式调用,例如上面的{{fn()}}

在我们的实际开发中,有时很难去确定具体用computed还是methods,因为这两种方法最后的到的结果是一样的,但是他们的原理和用法却完全不同,比如:我们想去时刻监控数据的变化,在视图上显示不同的结果,当然这两种方法都可以实现这种效果,这个时候用computed就比较合理了,因为computed是可缓存的,只要数据层值不改变,computed就不会去改变,而且可缓存,如果数据层的值变了,computed就会实时更新到视图层上,所以说computed是响应式的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值