当前位置: 首页 > news >正文

【Vue3】计算属性

【Vue3】计算属性

  • 背景
  • 简介
  • 开发环境
  • 开发步骤及源码

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

简介

本文介绍 Vue3 中计算属性的用法。

计算属性是根据其他数据的变化自动计算其关联的衍生值,且具备缓存机制,即只有依赖的数据发生变化时才会重新计算。

开发环境

分类名称版本
操作系统WindowsWindows 11
IDEVisual Studio Code1.91.1

开发步骤及源码

1> 在 【Vue3】响应式数据 基础上修改 Vue 根组件 App.vue 代码,使用 只读 的计算属性。

<!-- 组件结构 -->
<template><div class="person"><h3>姓名:{{ name }}</h3><h3>生日:{{ birthDisplay }}</h3><button @click="showContact">查看联系方式</button><button @click="changeName">修改名字</button></div>
</template><!-- 组件行为 -->
<script setup lang="ts" name="App">
import { computed, ref } from 'vue'// 数据定义
const name = ref('哈利·波特')
const birth = new Date('1980-07-31')
const contact = '霍格沃茨魔法学校格兰芬多学院'const birthDisplay = computed(() => {return birth.getFullYear() + '-' + (birth.getMonth() + 1) + "-" + birth.getDate()
})// 方法定义
function showContact() {alert(contact)
}function changeName() {name.value = 'Harry Potter'
}
</script><!-- 组件样式 -->
<style lang="scss">
.person {background-color: cadetblue;border-radius: 5px;color: white;padding: 20px;button {background-color: gold;border-radius: 5px;padding: 5px 10px;margin-right: 10px;}
}
</style>

2> 添加函数实现计算属性功能,观察两者间的区别。

<!-- 组件结构 -->
<template><div class="person"><h3>姓名:{{ name }}</h3><h3>生日(计算属性):{{ birthDisplay }}</h3><h3>生日(计算属性):{{ birthDisplay }}</h3><h3>生日(计算属性):{{ birthDisplay }}</h3><h3>生日(函数):{{ displayBirth() }}</h3><h3>生日(函数):{{ displayBirth() }}</h3><h3>生日(函数):{{ displayBirth() }}</h3><button @click="showContact">查看联系方式</button><button @click="changeName">修改名字</button></div>
</template><!-- 组件行为 -->
<script setup lang="ts" name="App">
import { computed, ref } from 'vue'// 数据定义
const name = ref('哈利·波特')
const birth = new Date('1980-07-31')
const contact = '霍格沃茨魔法学校格兰芬多学院'const birthDisplay = computed(() => {console.log('执行计算属性')return birth.getFullYear() + '-' + (birth.getMonth() + 1) + "-" + birth.getDate()
})function displayBirth() {console.log('执行函数')return birth.getFullYear() + '-' + (birth.getMonth() + 1) + "-" + birth.getDate()
}// 方法定义
function showContact() {alert(contact)
}function changeName() {name.value = 'Harry Potter'
}
</script><!-- 组件样式 -->
<style lang="scss">
.person {background-color: cadetblue;border-radius: 5px;color: white;padding: 20px;button {background-color: gold;border-radius: 5px;padding: 5px 10px;margin-right: 10px;}
}
</style>

页面中对计算属性和函数各使用了 3 次,但通过观察日志可以看出,计算属性实际只执行了 1 次,但函数执行了 3 次,因此证明计算属性是带缓存机制的。
计算属性 vs 函数

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android Studio关于Gradle及JDK问题解决
  • 安装 VMware vSphere vCenter 8.0
  • leetcode简单题27 N.119 杨辉三角II rust描述
  • 【React】JSX基础
  • Debezium日常分享系列之:Debezium2.7版本PostgreSQL数据库连接器
  • 艺术成分很高的完全自定义的UITabBar(很简单)
  • org.springframework.context.ApplicationContext发送消息
  • filebeat把日志文件上传到Es中配置(ES7版本)
  • 喜讯丨泰迪智能科技实力中标湖北民族大学数学与统计学院一流专业实验室建设项目
  • js | Core
  • 代码随想录学习 day54 图论 Bellman_ford 算法精讲
  • Oracle线上执行SQL特别慢的原因分析
  • Spring Boot(八十一):Sa-Token快速实现API接口签名安全校验
  • 《JavaSE》---21.<简单认识Java的集合框架包装类泛型>
  • matlab simulink气隙局部放电仿真技术研究
  • Android 控件背景颜色处理
  • ComponentOne 2017 V2版本正式发布
  • HomeBrew常规使用教程
  • HTML-表单
  • JavaScript标准库系列——Math对象和Date对象(二)
  • 从零开始在ubuntu上搭建node开发环境
  • 番外篇1:在Windows环境下安装JDK
  • 如何使用 JavaScript 解析 URL
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 学习使用ExpressJS 4.0中的新Router
  • 一个JAVA程序员成长之路分享
  • const的用法,特别是用在函数前面与后面的区别
  • ionic异常记录
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何在招聘中考核.NET架构师
  • !!Dom4j 学习笔记
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (转)为C# Windows服务添加安装程序
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net wcf memory gates checking failed
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /bin/rm: 参数列表过长"的解决办法
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C++核心编程](四):类和对象——封装
  • [CF482B]Interesting Array
  • [CLR via C#]11. 事件
  • [Flutter]打包IPA
  • [GKCTF 2021]excel 骚操作1
  • [HOW TO]如何在iPhone应用程序中发送邮件
  • [JavaWeb玩耍日记]Maven的安装与使用