Vue3 - computed 计算属性(详细教程)

news/2024/5/18 1:43:14 标签: vue3.js, 计算属性, computed, 详细教程, 官方文档

简介

相信大家在 Vue2 中已经领略到了其功能,不再过多赘述了。

计算属性处理一些复杂的运算非常合适,对于任何包含响应式数据的复杂逻辑的表达式,都建议使用计算属性来完成,而不是臃肿的在模板中直接书写。

回忆 Vue2

先来看个 Vue2 计算属性的小例子。

<template>
  <span>我的余额:{{ money }}</span>
</template>

<script>
export default {
  data() {
    return {
      money: 49
    }
  },
  
  computed: {
    // 给余额加货币单位
    money() {
      return '$' + this.money
    }
  }
}
</script>

在这里插入图片描述

好,可以看到成功通过计算属性,给咱们的余额加上了单位。

切入 Vue3

在 Vue3 中,你需要先将计算属性通过 import 引入计算属性,然后才能使用。

我们来用 Vue3 语法实现一下这个小例子。

<template>
  <span>我的余额:{{ newMoney }}</span>
</template>

<script>
import { ref, computed } from 'vue' 
export default {
  setup() {
    // 余额
    const money = ref(49)

    // 计算属性(简写方式)
    const newMoney = computed(() => {
      // 注意必须return(否则newMoney没有值)
      return '$' + money.value
    })

    // return
    return { newMoney }
  }
}
</script>

在这里插入图片描述

很完美啊,咱们可以从中观察到,我们必须将 computed 计算属性算好的值用一个变量进行接收,

而 Vue2 却不需要接收,直接在源数据上改了。


Vue3 想的是啥呢,你可以拿一个变量进行接收,也可以直接修改响应式源数据,这让开发者有了选择的权力。

而且可以做到源数据就是源数据,计算属性算好的结果就是结果,咱们互不影响,这种就是我们常说的 “低耦合” ,当然这完全取决于你的写法。

进阶示例

那我得到了计算结果后,我还想进一步修改,可以吗?这就涉及到了 Vue3 计算属性的只读和可读写概念了,我们来一起看一下。

在刚才示例的基础上,进行一些修改。

<template>
  <span>我的余额:{{ newMoney }}</span>
</template>

<script>
import { ref, computed } from 'vue' 
export default {
  setup() {
    // 余额
    const money = ref(49)

    // 计算属性(简写方式)
    const newMoney = computed(() => {
      // 注意必须return(否则newMoney没有值)
      return '$' + money.value
    })

    // 修改计算属性结果
    newMoney.value = '$999'

    // return
    return { newMoney }
  }
}
</script>

很遗憾修改无效且触发警告了,Vue3 不允许你对计算属性结果直接进行修改,那怎么办呢?

其实啊,刚才前面也提到了,Vue3 计算属性分为只读和可读写两种,刚才我们玩的是只读,所以当我们直接修改计算属性结果的时候,收到了警告信息。


那么可读写的计算属性,又是怎么写呢?

再搞一个新的小例子出来,直接干代码。

<template>
  <span>我的余额:{{ newMoney }}</span>
</template>

<script>
import { ref, computed } from 'vue' 
export default {
  setup() {
    // 余额
    const money = ref(10)

    // 计算属性(简写方式)
    const newMoney = computed({
      // 获取结果
      get: () => {
        let result = money.value += 10
        return result
      },
      // 修改结果(val:你修改的数据)
      set: (val) => {
        money.value = money.value += val
      }
    })

    // 修改计算属性结果,让其加上指定参数
    newMoney.value = 100

    // return
    return { newMoney }
  }
}
</script>

首先可以看到得出的结果是 120,这个结果是怎么计算出来的呢?代码又是如何运行的呢?咱们来仔细分析一下啊。

在这里插入图片描述
首先,咱们的金额初始值为 10,注意啊,当遇到 computed 计算属性时,它会全文检索是否有对计算属性修改结果的操作,很显然我们是有修改操作。

此时就会先执行 set 属性完成运算,此时得到的结果为 100 + 10 = 110 ,然后紧接着就会执行 get 属性进行运算返回,最终得到的结果就是 110 + 10 = 120

大家感觉理解起来有没有困难?我们用 console.log 打印一下,看得更清楚点。

<template>
  <span>我的余额:{{ newMoney }}</span>
</template>

<script>
import { ref, computed } from 'vue' 
export default {
  setup() {
    // 余额
    const money = ref(10)

    // 计算属性(简写方式)
    const newMoney = computed({
      // 获取结果
      get: () => {
        let result = money.value += 10
        console.log(`get: 我执行了!现在结果是 ${result}`)
        return result
      },
      // 修改结果(val:你修改的数据)
      set: (val) => {
        money.value = money.value += val
        console.log(`set: 我执行了!现在结果是 ${money.value}`)
      }
    })

    // 修改计算属性结果,让其加上指定参数
    newMoney.value = 100

    // return
    return { newMoney }
  }
}
</script>

在这里插入图片描述

看,是不是 set 属性先执行到了,最后执行到了 get 属性,没问题。

最后给大家画了个流程图,能让大家更好地去理解 Vue3 计算属性的流程。

在这里插入图片描述

最后总结一下,大家一定要摸清楚 Vue3 计算属性的处理流程,这样大家在开发项目时才能更好的处理数据。

SEO

Vue.js 官方文档,vue3 计算属性官方文档教程,vue3.0computed计算属性,前端之vue3计算属性computed,vue computed项目实战,vue3快速入门-computed计算属性,vue3学习之计算属性computed,Vue3.x computed函数—计算属性,vue3的计算属性computed,Vue3使用计算属性 computed,在vue3 中, computed 计算属性性能问题,Vue3 计算属性 | 菜鸟教程,Vue3 - computed 计算属性详细教程)。


http://www.niftyadmin.cn/n/9153.html

相关文章

【C语言】分支语句 循环语句 _训练题型加深理解

1.分支语句 自从学习编程以来每天都在写分支语句&#xff0c;那么什么是分支语句呢&#xff1f; 下面举两个生动的例子来更好的理解分支语句&#xff1a; 比如我们买东西&#xff0c;要么支付现金&#xff0c;要么使用微信或者支付宝。在大学如果你好好学习&#xff0c;校招…

前端学习路线(二)

在前端学习路线&#xff08;一&#xff09;一章中我们讲了关于前端三剑客和jq与js的问题&#xff0c;并且简要的说明了js高级是什么&#xff0c;那在本章节我们主要从如何学习js高级开始进行讲述&#xff0c;并对es6如何学习&#xff0c;bootstrap学不学和学什么&#xff0c;并…

为什么产品经理都在考PMP?一文透析

或许你会疑惑产品经理和PMP项目管理项目管理专业人士证书有什么关系&#xff1f;为什么产品经理要考个PMP证书&#xff1f; PMP是项目管理证书&#xff0c;表面上和产品经理没什么关系&#xff0c;大家都认为新产品开发管理师证照才是产品经理的归宿&#xff0c;实际上&#x…

基于51单片机驱动A4988实现步进电机逆时针转动

基于51单片机驱动A4988实现步进电机逆时针转动一、简介二、接线典型接线图实际接线三、部分代码引脚定义定时器初始化主函数四、实验现象五、注意事项一、简介 A4988 是一款完全的微步电动机驱动器&#xff0c;带有内置转换器&#xff0c;易于操作。该产 品可在全、半、1/4、1…

Web3——开发第一个智能合约

学习写第一个智能合约&#xff0c;下面连接是集成开发环境 https://github.com/smartcontractkit/full-blockchain-solidity-course-js#lesson-2-welcome-to-remix-simple-storage 点击 “Remix” 来到Remix IDE&#xff0c;这就是我们要写代码的地方&#xff0c;集成开发环境…

mysql入门练习

创建数据库day1db字符集utf8并使用 create database day1db default charset utf8;创建t_hero表,有name字段字符集utf8 create table t_hero (name char)charsetutf8;修改表名为hero alter table t_hero rename hero;最后面添加价格字段money,最前面添加id字段, name后面添加…

java和vue车辆管理系统车管所系统

简介 车辆管理系统车管所系统&#xff0c;管理员添加车主信息&#xff0c;车主提交自己的车辆信息&#xff0c;管理员审核车辆&#xff0c;对车辆行进年检&#xff0c;统计&#xff0c;记录车辆违规信息。车主可以查看自己的车辆信息、投诉、查看自己的违规记录等。 演示视频…

【2011】408联考操作系统真题整理

2011年 23 题目 满足短作业优先且不会发生饥饿现象的调度算法&#xff1a;高响应比优先 解析 24 题目 用户态执行的是命令解释程序 解析 法一&#xff1a;正向选择 DOS对应联机命令接口 法二&#xff1a;逆向排除 非用户态 -> 内核态 25 题目 在支持多线程的…