计算属性与方法

一、计算属性缓存 vs 方法

计算属性也可以使用方法,来达到同样的效果
你可能已经注意到我们可以通过在表达式中调用方法来达到同样的效果:

<p>Reversed message: "{{ reversedMessage() }}"</p>

// 在组件中
methods: {
    reversedMessage: function () {
        return this.message.split('').reverse().join('')
    }
}

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。计算属性与方法其实都是一个函数。然而,不同的是计算属性是基于它们的依赖进行缓存的。只在相关依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。直接返回之前的缓存,代码效率也会更高。
这也同样意味着下面的计算属性将不再更新,因为 Date.now() 不是响应式依赖

computed: {
    now: function () {
        return Date.now()
    }
}

什么是响应式依赖,一般你定义在组件的data() {}中的数据就是响应式的。有时候你发现你定义的计算属性莫名其妙的就是没调用到,很大可能是因为你没用到响应式数据。
相比之下,每当触发重新渲染时,调用方法将总会再次执行函数
我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A 。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。

二、侦听属性

在前端开发中,我想实现某个变量变化时,就调用相应的方法。vue中的监听属性能实现这个需求。

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo'
  },  
  watch: {
    // 有两个参数,变化前,变化后的值
    firstName: function (val) {
      console.log('new val', val)
    }
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,156评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,667评论 8 265
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 13:00——14:00 “豆宝,上床睡午觉。” “我不想睡,我还要看很久的电视。” 陪看了一会儿,“妈妈先睡,你...
    安提_7edd阅读 234评论 0 0
  • 9 华灯初上,天气微寒,车流如织,归影匆匆。今天堵...
    山河自在阅读 216评论 0 3