vue3.0计算属性_属性是怎么算的

vue3.0计算属性_属性是怎么算的前言一般情况下属性都是放到data中的,但是有些属性可能是需要经过一些逻辑计算后才能得出来,那么我们可以把这类属性变成计算属性。比如以下:<divid="example&quot

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

一般情况下属性都是放到data中的,但是有些属性可能是需要经过一些逻辑计算后才能得出来,那么我们可以把这类属性变成计算属性。比如以下:

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

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。

所以,对于任何复杂逻辑,你都应当使用计算属性。
 

基础例子

<div id="app">
  <h2>总价格:{{totalPrice}}</h2>
</div>
<script>
  const vm = new Vue({
    el: "#app",
    data: {
      message: "hello",
      books: [
        {name: '三国演义', price: 30},
        {name: '红楼梦', price: 40},
        {name: '西游记', price: 50},
        {name: '水浒传', price: 60},
      ],
    },
    computed: {
      // 计算属性的 getter
      totalPrice: function (){
          let result = 0;
          // `this` 指向 vm 实例
          for (let book of this.books){
            result += book.price;
          }
          return result
      }
    }
  })
</script>

结果:总价格:180

这里我们声明了一个计算属性 totalPrice。然后通过for循环计算出书的总价,像这种需要计算的属性,就写在computed中。

属性一般都有getset两个方法,get获取属性值,set设置属性值,computed中默认就是get属性,我们的vm.totalPrice是依赖于books.price,如果书本的价格发生变化,那么计算属性totalPrice也随之动态变化
 

计算属性缓存 vs 方法

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

<div id="app">
  <h2>总价格:{{getAllPrice()}}</h2>
</div>
<script>
  const vm = new Vue({
    el: "#app",
    data: {
      message: "hello",
      books: [
        {name: '三国演义', price: 30},
        {name: '红楼梦', price: 40},
        {name: '西游记', price: 50},
        {name: '水浒传', price: 60},
      ],
    },
    methods: {
      getAllPrice: function () {
        let result = 0;
        // `this` 指向 vm 实例
        for (let book of this.books){
          result += book.price;
        }
        return result
      }
    },
  })
</script>

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 books 还没有发生改变,多次访问 totalPrice 计算属性会立即返回之前的计算结果,而不必再次执行函数。

所以说计算属性是有缓存的

我们为什么需要缓存?假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A。如果没有缓存,我们将不可避免的多次执行 A 的 getter!如果你不希望有缓存,请用方法来替代。
 

计算属性的 setter

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter

computed: {
  totalPrice: {
    get: function () {
      let result = 0;
      // `this` 指向 vm 实例
      for (let book of this.books){
        result += book.price;
      }
      return result
    },
    set: function (newValue) {
      for (let book of this.books){
        book.price += 10
      }
    }
  }
}

这里我们添加了set方法,在运行vm.totalPrice=[...]时,setter 会被调用,随后书本的总价格也会随之变化,但是一般情况下不会使用set

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166109.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • scratch编程谷歌小恐龙游戏[通俗易懂]

    scratch编程谷歌小恐龙游戏[通俗易懂]请点击右上角蓝字关注微信公众号!你知道吗?谷歌浏览器有一个很有趣的小彩蛋,那就是在没有链接上网络时随便打开一个网页,会显示出未连接上互联网,并且下面有一个小恐龙的造型,按下空格后就可以玩一个类似跑酷的小游戏:下面是本作者做的效果:基本上差不多,现在我们就来编程吧!首先我们要画出各种角色及造型,本作者是一张一张截屏抠图的:恐龙的造型:程序是非常简单的:恐龙奔跑速度要越来越快哦!特简单吧?接下来看障碍物——仙人掌:仙人掌移动速度会越来越快小鸟的程序:来看看作为装饰用的云

  • linux ntp时钟服务器地址_Linux时间同步+国内常用的NTP服务器地址【NTP时间同步服务器】…

    linux ntp时钟服务器地址_Linux时间同步+国内常用的NTP服务器地址【NTP时间同步服务器】…210.72.145.44(国家授时中心服务器IP地址)133.100.11.8日本福冈大学time-a.nist.gov129.6.15.28NIST,Gaithersburg,Marylandtime-b.nist.gov129.6.15.29NIST,Gaithersburg,Marylandtime-a.timefreq.bldrdoc.gov132.163.4.1…

  • 测试用例设计常用方法有哪些_软件测试用例包括什么

    测试用例设计常用方法有哪些_软件测试用例包括什么目录一、测试用例二、黑盒测试2.1、等价类划分法2.1.1、定义2.1.2、等价类划分分类2.1.3、等价类划分原则2.2.4、等价类方法设计测试用例步骤2.2、边界值方法2.2.1、边界值的概念2.2.2、边界值选择遵循的原则2.2.3、边界值方法设计测试用例2.3、判定表方法2.3.1、判定表结构2.3.2、判定表设计测试用例2.4、因果图方法2.4.1、因果图法设计测试用例一、测试用例测试用例: 将要进行的测试工

  • c++读写锁实现_设计模式PDF

    c++读写锁实现_设计模式PDFC++读写锁设计允许读数据同时进行,但与写数据是互斥的存在,只有读数据操作所有完成后释放锁才允许写。反之亦成立。自旋式读写锁,减轻使用者的释放锁的烦恼,当自旋读写锁超出作用域则会自动释放锁。

  • java怎么调用.asmx_Java调用Webservice(asmx)的例子

    java怎么调用.asmx_Java调用Webservice(asmx)的例子importjava.util.LinkedList;importjava.util.List;importjava.util.Map;importjava.util.Vector;importjavax.xml.namespace.QName;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service…

  • 深度学习 | Word2vec原理及应用

    深度学习 | Word2vec原理及应用聊聊Word2vec1前言2什么是Word2vec?2.1定义2.1.1分词的原理介绍2.1.2文本向量化的方式2.2数学原理2.2.1CBOW(ContinuousBag-of-Words)原理2.2.2Skip-Gram原理2.2.3为什么要有Word2vec而不是用原来的?2.2.4Word2vec基础:霍夫曼树2.2.5HierarchicalSoftmax2….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号