Vue中的computed

computed的定义

当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值。
为什么要使用computed

首先,通过vue官方文档的案例,来解释一下,为什么要使用computed。我们都知道,在模板内的表达式非常遍历的,但是,有时候,我们会在模板内的放入太多逻辑的东西。会让模板变重,且难于维护。

<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

在这模板中的代码中,其实,我们需要花费上一小段时间去理解,这块渲染的是什么—message的翻转字符串。然而,当初模板中使用表达式的初衷时为了简单运算的。所以,从这点出发,我们是不是就不建议在模板中使用过于复杂的表达式了。此时,计算属性就横空出世了。计算属性就是当依赖的属性的值发生变化的时候,才会触发他的更改,如果依赖的值,不发生变化的时候,使用的是缓存中的属性值。

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>


var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})

computed的getter函数

在vue中,computed的属性可以被视为是data一样,可以读取和设值。因此,在computed中可以分为getter(读取)和setter(设值),一般情况下,是没有setter的,computed只是预设了getter,也就是只能读取,不可以改变设值。所以,computed默认格式(是不表明getter函数的):
html:

  <div>
     message: {{message}}
  </div>

  <!-- 计算属性 -->
  <div>
     计算属性: {{updateMessage}}
 </div>
computed: {
    updateMessage(): {
            console.log('计算属性', this.message)
            return this.message
    }
}

等价于

computed: {

updateMessage: {
  get: function() {
    console.log('计算属性', this.message)
    return this.message
  		}
 	}
  },

发现了一个小小的惊喜:当模板中不使用updateMessage,即使message发生改变之后,也不会走computed。神奇不神奇??哈哈哈

在这里,就需要我们注意一下,不是说我们更改了getter中使用的变量(即依赖的属性),就会触发computed的更新,他有一个前提是computed里的值必须要在模板中使用才可以。但是会触发生命周期的updated()
computed中的setter函数

当赋值给计算属性的时候,将调用setter函数。多用于在模板组件中需要修改计算属性自身的值的时候。

computed: {
    updateMessage: {
      get: function() {
        console.log('计算属性', this.message)
        return this.message
      },
      set: function(newVal) {
        this.message = newVal
        console.log('newVal', newVal)
      }
    }
  },
 mounted () {
    this.updateMessage = '222'
    console.log('测试:', this)
 },

只有当计算属性中的属性被直接赋值的时候,才会走setter函数,而且,setter函数和getter函数是相互独立的,不是说,走setter函数,就必须走getter函数。上面的案例,打印结果是

newVal: 222,
计算属性: 222

是因为,在setter中触发了message的更改,当message发生改变的时候,getter函数中就会改变。

computed: {
    updateMessage: {
      get: function() {
        console.log('计算属性', this.message)
        return this.message
      },
      set: function(newVal) {
        console.log('newVal', newVal)
      }
    }
  },
 mounted () {
    console.log('测试:', this)
 },

这种情况下,打印结果是:

newVal 222

此时,就只是单单的走了setter的函数,而没有走getter函数。
总结

这篇文章呢,主要是介绍一下关于computed的基本构成和使用,也算是,自己对computed的一个简单的总结。不会让自己在做项目的过程中,遇见关于类似的问题,而无法解决。不知道如何使用。因为有些神奇的现象是必须要通过原理来解释的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值