vue3.0计算属性_vue计算属性什么时候执行

vue3.0计算属性_vue计算属性什么时候执行前言一般情况下属性都是放到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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165403.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月30日 下午4:00
下一篇 2022年7月30日 下午4:16


相关推荐

  • 亲测效果:性价比最高的OpenClaw本地部署推荐

    亲测效果:性价比最高的OpenClaw本地部署推荐

    2026年3月16日
    2
  • Exchange2010 owa 访问 http 500 内部服务器错误

    Exchange2010 owa 访问 http 500 内部服务器错误故障原因:exchange2010服务器意外关机,重启后owa能打开,输入用户名及密码后,无法访问“http500内部服务器错误”解决方法:在控制面板中打开“服务”,找到“基于MicrosoftExchange表单的身份验证服务”并启动该服务。然后重启下IIS,OWA访问回复正常。本文转自liang_simon51CTO博…

    2022年8月12日
    7
  • 列存储索引1:初识列存储索引

    列存储索引1:初识列存储索引

    2021年11月24日
    43
  • 快捷方式图标显示不正常_win10快捷方式不显示图标

    快捷方式图标显示不正常_win10快捷方式不显示图标win10系统的电脑近期遇到一个问题,那就是桌面上或者某磁盘中文件夹的程序快捷方式图标丢失显示异常,部分程序为一个白纸图标,不显示原本的程序图标,但是这些软件或者游戏的快捷方式能正常打开。那么游戏、软件等应用程序快捷方式不显示图标怎么办?下面装机之家分享一下Win10快捷方式图标变白纸解决方法。原因分析:在Win10系统中,首次对图标进行显示,为了加速图标的显示,之后系统会对图标进行缓存,如果缓存…

    2022年10月18日
    5
  • GoLand 2021.12.12激活[最新免费获取]

    (GoLand 2021.12.12激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0BXA05X8YC-eyJsa…

    2022年3月30日
    49
  • 如何进行电子邮件营销与推广

    如何进行电子邮件营销与推广其实 电子邮件营销现在网上已经有了很多的相关文章了 前几天还看见卢松松写了一篇 但是尽管如此 但是都只是蜻蜓点水 没有深入 所以今天我觉得我们有必要再谈谈电子邮件营销 讲讲如何进行电子邮件营销与推广 首先 我们来看看电子邮件营销的好处与优势 优势一 成本低 从收集电子邮件的角度讲 收集电子邮件是非常简单的 复制粘贴即可 下面我会跟大家讲如何收集电子邮件 从技术角度讲 只要会上网的每个人都会

    2026年1月22日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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