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

news2025/1/15 17:51:52

简介

相信大家在 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.coloradmin.cn/o/10511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE4插件-读取png图片

一、简介 在UE4中有多种类型的插件&#xff0c;适用于不同的场景。既可以放到引擎中还可以放到项目中&#xff0c;放到引擎中的插件可以被所有项目使用&#xff0c;放到项目中的插件只能被当前项目使用。插件的类型可以在【Edit】->【Plugins】->【New Plugin】中查看 …

06 在MSYS2中编译树莓派裸机程序,并在QEMU中运行

作者将狼才鲸创建日期2022-11-14 Gitee源码和工程地址&#xff1a;才鲸嵌入式 / 开源安防摄像机&#xff08;嵌入式软件&#xff09; CSDN文章地址&#xff1a;项目介绍&#xff1a;开源安防摄像机&#xff08;嵌入式软件&#xff09; 4&#xff09;完整的环境安装步骤 写在前…

软件产品测试的准入准出标准有哪些?

软件产品的测试并不是测试人员简单的执行测试过程便可以交付的&#xff0c;而是有着一定的标准&#xff0c;什么条件可以开始测试&#xff0c;什么时候结束测试等等也就是测试的准入准出标准。 一、软件测试的准入标准 1、开发人员编码结束并且已在开发环境中完成单元测试&a…

OpUtils局域网唤醒:远程引导计算机

局域网唤醒 &#xff08;LAN&#xff09;&#xff0c;通常称为 LAN 唤醒&#xff0c;是一种计算机网络标准&#xff0c;有助于远程启动有线和无线网络。也称为远程唤醒、LAN 唤醒、无线 LAN 唤醒或简称 WOL&#xff0c;LAN 唤醒技术可帮助网络管理员优化能源使用&#xff0c;并…

一文教你搞定Python如何自定义标准排序

文章目录1.字典自定义排序按照value排序按照key值排序先按照value降序&#xff0c;再按key升序2.多维列表自定义标准排序案例题目描述输入输出代码&#xff1a;1.字典自定义排序 按照value排序 sdict() s[a]45 s[b]44 s[c]78 s[d]34 asorted(s.items(),keylambda x:x[1],reve…

手摸手教你使用 Docker 快速搭建 Gitlab 服务

前言 Glitlab 比较占用内存&#xff0c;官方建议最低配置为 2核4G。我的服务器刚刚好是2核4G&#xff0c;但是还装了 Docker 跑一些其他服务&#xff0c;所以以防万一&#xff0c;还是选择在本地的虚拟机中进行安装。 如果你有一台配置较高的服务器那就更好了&#xff0c;一步…

nodejs+vue+elementui图书馆销售网上书城管理系统express228

目 录 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 3 下面我们讲解 1、 node_modules文…

【数据结构】队列详解 栈和队列OJ题 —— 用队列实现栈、用栈实现队列、设计循环队列

文章目录前言队列的概念队列的结构队列的实现结构设计接口总览初始化销毁入队列出队列取对头数据取队尾数据判空计算队列大小OJ题用队列实现栈用栈实现队列设计循环队列结语前言 今天的内容分为两大块&#xff1a;队列讲解 和 OJ题。队列讲解部分内容为&#xff1a;队列概念&a…

Android App开发图像加工中卡片视图CardView和给图像添加装饰的讲解以及实战(附源码 简单易懂)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、卡片视图 随着手机越来越先进&#xff0c;开发者已经不满足简单地显示一张张图片&#xff0c;而要设计更多的花样&#xff0c;比如Android提供了一个卡片视图CardView&#xff0c;顾名思义它拥有卡片式的圆角边框&#xff…

[附源码]java毕业设计健身房管理系统论文2022

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

深度剖析 Vue3 如何通过虚拟DOM更新页面

上一讲我们主要介绍了 Vue 项目的首次渲染流程&#xff0c;在 mountComponent 中注册了effect 函数&#xff0c;这样&#xff0c;在组件数据有更新的时候&#xff0c;就会通知到组件的 update 方法进行更新 Vue 中组件更新的方式也是使用了响应式 虚拟 DOM 的方式&#xff0c…

git 命令行其实真的很好用

使用命令行操作git&#xff0c;我觉得是最简单、最直接的方式&#xff0c;最开始使用git的时候特别喜欢这种方式。后来&#xff0c;就不再使用命令行&#xff0c;而是选择了其他可视化的工具&#xff0c;如idea自带的插件、sourceTree、TortoiseGit、GitKraken。发生的转变的原…

AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 深度学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/42 &#x1f4d8; 自然语言处理实战系列&#xff1a;https://www.showmeai.tech/tutorials/45 &#x1f4d8; 计算机视觉实战系列&#xff1a;h…

Jenkins 10 问 10 答,你想知道都在这

大家好啊&#xff0c;我是大田。 今天汇总一下近几周关于 Jenkins 问题。 1、如何安装 Jenkins&#xff1f; 答&#xff1a;一步一步教你安装部署 Jenkins&#xff0c;不信你安不上 2、忘记登录密码&#xff1f; 答&#xff1a;Jenkins 忘记登录密码解决办法 3、jenkins中缺少…

基于 IDEA 搭建 RocketMQ-4.6 源码环境

RocketMQ 架构 源码搭建前&#xff0c; 需要理解 RocketMQ 的四个重要组件&#xff0c; 以及 RocketMQ 的工作流程&#xff1a; NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 Broker部署相对复杂&#xff0c;Broker分为Master…

Java基础之《undertow容器》

一、什么是undertow 1、undertow是springboot默认支持的三种servlet容器之一。 tomcat、jetty、undertow 2、undertow怎么读 under-tow 3、undertow是RedHat&#xff08;红帽公司&#xff09;的开源产品&#xff0c;采用java开发&#xff0c;是一款灵活、高性能的web服务器&…

大学生游戏静态HTML网页设计-(北京冬奥会12页 带js 带视频 轮播图)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和css3&#xff0c; 采用…

stack容器、queue容器(20221116)

一、stack容器 1、基本概念 先进后出的数据结构&#xff0c;只有一个出口&#xff08;栈顶&#xff09;。 栈不允许有遍历行为&#xff0c;可以判断是否为空(empty)&#xff0c;也可以知道其元素个数&#xff08;size&#xff09; 2、常用接口 构造函数&#xff1a; stac…

初始MySQL

目录 一、什么是数据库 二、SQL分类 三、库的操作 四、表的操作 五、数据类型 六、表的约束 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要有数据库&#xff1f; 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理 文件…

电脑视频怎么录制?好用的电脑录屏方法

在日常使用电脑的时候&#xff0c;很多小伙伴经常会遇到需要录制电脑视频的时候。但网上各种眼花缭乱的电脑录屏方法&#xff0c;很多小伙伴看了表示自己根本没有学会。今天就给大家分享2个简单好用的电脑录屏方法&#xff0c;看完后轻松掌握电脑录屏。 一&#xff0e;使用Wind…