Vue计算属性Computed

news2025/7/13 17:00:59

30. Vue计算属性Computed

1. 定义

Computed属性是Vue中的一个计算属性,是一种基于其它属性值计算而来的属性值,具有缓存机制,在依赖的属性值发生变化时会重新计算。

使用computed属性可以避免在模板中书写过多的计算逻辑,提高代码可读性和维护性。

下面是一个计算属性的示例:

<template>
  <div>
    <h3>单价: ¥{{ price }}</h3>
    <input type="text" v-model="count" placeholder="请输入数量"><h3>总价: ¥{{ totalPrice }}</h3>
  </div>
</template>
<!-- vue2 -->
<script>
export default {
  data() {
    return {
      price: 12,
      count: null
    }
  },
  computed: {
    totalPrice() {
      return this.price * this.count
    }
  }
}
</script>
<!-- vue3 -->
<script setup>
import { ref, computed } from "vue"
const price = ref(12)
const count = ref(0)
const totalPrice = computed(() => {
  return price.value * count.value
})
</script>

2. computed和methods对比

计算属性是有缓存的, 当我们多次使用计算属性时, 计算属性中的运算只会执行一次。如下图:

<template>
  <div>
    <div>{{ fullName }}</div>
    <div>{{ fullName }}</div>
    <div>{{ fullName }}</div>
    <div>{{ fullName }}</div>
    <div>{{ fullName }}</div>
    <div>{{ fullName }}</div>

    <div>{{ getFullName() }}</div>
    <div>{{ getFullName() }}</div>
    <div>{{ getFullName() }}</div>
    <div>{{ getFullName() }}</div>
    <div>{{ getFullName() }}</div>
  </div>
</template>
<!-- vue2 -->
<script>
export default {
  data() {
    return {
      firstName: "Jack",
      lastName: "Ma"
    }
  },
  computed: {
    fullName() {
      console.log("computed获取fullname");
      return this.firstName + this.lastName;
    }
  },
  methods:{
    getFullName() {
      console.log("methods获取fullname");
      return this.firstName * this.lastName;
    }
  }
}
</script>
<!-- vue3 -->
<script setup>
import { ref, computed } from "vue"

const firstName = ref("J.K.")
const lastName = ref("Rowling")

const fullName = computed(() => {
    console.log("computed获取full");
    return firstName.value + lastName.value
})

const getFullName = function() {
  console.log("methods获取full");
  return firstName.value + lastName.value
}
</script>

computed缓存

3. Getter和Setter

计算属性默认是只读的,也就是只用到getter。当你尝试修改一个计算属性时,你会收到一个运行时警告。只在某些特殊场景中你可能才需要用到“可写”的属性,你可以通过同时提供 gettersetter 来创建:

<!-- vue2 -->
<script>
export default {
  data() {
    return {
      firstName: "Jack",
      lastName: "Ma"
    }
  },
  computed: {
    fullName: {
      // getter
      get() {
        return this.firstName + this.lastName;
      },
      // setter
      set(newValue) {
        // 注意:我们这里使用的是解构赋值语法
        [this.firstName, this.lastName] = newValue.split(' ')
      }
    }
  },  
  methods:{
    setNewName(){
      //设置值触发setter
      this.fullName = "Tom Mao"
      console.log(this.firstName, this.lastName);
    }
  }
}
</script>
<!-- vue3 -->
<script setup>
import { ref, computed } from "vue"

const firstName = ref("J.K.")
const lastName = ref("Rowling")

const fullName = computed({
  get() {
    return firstName.value + lastName.value
  },
  set(newValue) {
    [firstName.value, lastName.value] = newValue.split(' ')
  }
})

const setNewName = function() {
  fullName.value = "John Doe"
}
</script>

4. Getter 不应有副作用

需要注意的是,computed属性必须返回一个值,不能有副作用,如修改数据或触发异步操作等。如果需要有副作用的计算,可以使用watch属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396037.html

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

相关文章

【敏捷开发】jenkins「CI持续集成 CD持续部署」- 部署vue和go项目 - 待定

文章目录前言一、安装jenkins1. 部署中的痛点2. 什么是jenkins3. jenkins的安装和配置&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装二、上传到运行服务器1. jenkins构建服务器流程2. 安装jenkins常用插件3. 通过freestyle构建项目4. 将构建服务器上的代码上传到…

Mybatis工程升级到FlunetMybatis后引发的问题以及解决方法

0. 背景交代为了提高开发速度,我打算将公司原有Mybatis框架升级为FlunetMybatis。可是遇到了一系列问题&#xff0c;下面开始爬坑工程结构示意如下&#xff1a;src/ ├── main │ ├── java.com.demo │ │ ├── Application.java //S…

常见数据模型

目录 1.1两类数据模型 1.2概念模型 1.3数据模型的组成要素 1.4常见数据模型 层次模型 网状模型 关系模型 数据模型是对现实世界数据特征的抽象&#xff0c;也就是说数据模型是用来描述数据、组织数据和对数据进行操作的。数据模型是数据库系统的核心和基础。 1.1两类数…

ip地址的分类及地址范围

IP地址根据网络ID的不同分为5种类型&#xff0c;A类地址、B类地址、C类地址、D类地址和E类地址。1、A类IP地址一个A类IP地址是指&#xff0c; 在IP地址的四段号码中&#xff0c;第一段号码为网络号码&#xff0c;剩下的三段号码为本地计算机的号码。A类IP地址中网络的标识长度为…

一种用于智能建筑云辅助检测的快速传感器放置位置优化方法

随着健康意识的觉醒&#xff0c;人们对居住的建筑提出了一系列与健康相关的要求&#xff0c;以期改善居住条件。在此背景下&#xff0c;BIM&#xff08;Building Information Modeling&#xff09;充分利用健康、环境、信息技术等诸多领域的前沿理论和技术&#xff0c;为工程师…

低代码开发的优势是什么?

低代码开发的优势是什么?低代码开发这个概念这两年来经常出现在人们的视野中&#xff0c;市场对于低代码的需求也越来越庞大。 Gartner预测&#xff0c;到2025年&#xff0c;75%的大型企业将使用至少四种低代码/无代码开发工具&#xff0c;用于IT应用开发和公民开发计划。 可…

Java面试题--Spring事务失效

Spring事务失效概述 Spring对事务的管理和处理&#xff0c;是基于AOP和编程范式的。因此Spring事务失效的场景较为丰富&#xff0c;包括但不限于以下常见情况&#xff1a; 异常被吞掉&#xff1a;当事务管理中出现异常但没有被正确捕捉并处理时&#xff0c;事务就会失效。例如…

Sedona 简介

Sedona 可以做什么? 分布式空间数据集 Spatial RDD on SparkSpatial DataFrame/SQL on SparkSpatial DataStream on FlinkSpatial Table/SQL on Flink 处理复杂的空间类型 Vector geometries / trajectoriesRaster images with Map AlgebraVarious input formats: CSV, TSV…

Vue 项目如何迁移小程序

最近我们看到有开发者在社群里提出新的疑惑「我手头已经有一个成熟的 HTML5 项目了&#xff0c;这种项目可以转为小程序在 FinClip 环境中运行吗&#xff1f;」。 经过工作人员的沟通了解&#xff0c;开发者其实是想将已有的 Vue 项目转为小程序&#xff0c;在集成了 FinClip …

(蓝桥真题)扫描游戏(计算几何+线段树二分)

题目链接&#xff1a;P8777 [蓝桥杯 2022 省 A] 扫描游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入&#xff1a; 5 2 0 1 1 0 3 2 4 3 5 6 8 1 -51 -33 2 样例输出&#xff1a; 1 1 3 4 -1 分析&#xff1a;先考虑如何对物件进行排序&#xff0c;首先&…

【PSO-PID】使用粒子群算法整定PID参数控制起动机入口压力值

最近在学优化算法&#xff0c;接触到了经典寻优算法之粒子群PSO&#xff0c;然后就想使用PSO算法来调节PID参数&#xff0c;在试验成功之后将此控制算法应用到了空气起动系统上&#xff0c;同时与之前的控制器进行对比看看哪种控制效果最好。 0 引言 PID参数整定主要有两种&…

谁说程序员不懂了浪费,女神节安排

Python的PyQt框架的使用一、前言二、女神节文案三、浪漫的代码四、官宣文案一、前言 个人主页: ζ小菜鸡大家好&#xff0c;我是ζ小菜鸡&#xff0c;特在这个特殊的日子献上此文&#xff0c;希望小伙伴们能讨自己的女神欢心。 二、女神节文案 1.生活一半是柴米油盐&#xff0c…

优化设计流程的“闭环”问题

7.优化设计流程的“闭环”问题 交互设计师有一项很重要的工作就是定义任务流程。在接到需求之后&#xff0c;设计师需要把抽象的需求设计成具象的流程&#xff0c;然后再把流程分配到不同的界面&#xff0c;最终形成成品。设计流程不难&#xff0c;但是设计好的流程非常难&…

VisualStudio2022制作多项目模板及Vsix插件

一、安装工作负载 在vs2022上安装“visual studio扩展开发 ”工作负载 二、制作多项目模板 导出项目模板这个我就不再多说了&#xff08;项目→导出模板→选择项目模板&#xff0c;选择要导出的项目→填写模板信息→完成&#xff09;。 1.准备模板文件 将解决方案中的多个…

SpringBoot整合ElasticSearch实现模糊查询,排序,分页,高亮

目录 前言 1.框架集成-SpringData-整体介绍 1.1Spring Data Elasticsearch 介绍 2.框架集成Spring Data Elasticsearch 2.1版本说明 2.2.idea创建一个springboot项目 2.3.导入依懒 2.3.增加配置文件 2.4Spring Boot 主程序。 2.5.数据实体类 2.6.配置类 2.7.DAO 数据…

速卖通、亚马逊、ebay打造爆款,借助测评自养号提高转化率

做速卖通、亚马逊、ebay只有打造爆款&#xff0c;才能够挣到钱&#xff0c;如果一年到头&#xff0c;不断测款&#xff0c;不断测试不同的广告打法&#xff0c;那么代表了什么&#xff1f;代表了你的试错成本相当高&#xff0c;一不小心&#xff0c;分分钟就能够把手头上仅有的…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.57】引入可形变卷积

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…

SRP合批问题

1&#xff09;SRP合批问题 ​2&#xff09;多个Base相机渲染到同一个渲染目标&#xff0c;移动平台花屏的问题 3&#xff09;粒子系统对GPU Instancing的支持 4&#xff09;如何修改URP下场景和UI分辨率分离&#xff08;不需要改颜色空间&#xff09; 这是第327篇UWA技术知识分…

苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用

苹果于 2017 年 5 月收购了芬兰科技公司 Beddit&#xff0c;只是在过去 6 年时间里并没有太大的动作。根据美国商标和专利局本周公示的清单&#xff0c;苹果获得了一项 Beddit 相关的技术专利。 根据专利描述&#xff0c;苹果使用一根或者多根天线&#xff0c;利用电磁辐射的…

详解Java8中如何通过方法引用获取属性名/::的使用

在我们开发过程中常常有一个需求&#xff0c;就是要知道实体类中Getter方法对应的属性名称&#xff08;Field Name&#xff09;&#xff0c;例如实体类属性到数据库字段的映射&#xff0c;我们常常是硬编码指定 属性名&#xff0c;这种硬编码有两个缺点。 1、编码效率低&#x…