Vue 3 中的计算属性:只读与可读写的使用与案例

在 Vue 3 中,计算属性(Computed Properties)是一种强大的工具,它允许我们根据响应式数据动态计算并返回一个新的值。计算属性具有缓存机制,只有当依赖的响应式数据发生变化时,才会重新计算。本文将详细介绍 Vue 3 中计算属性的使用,并通过只读和可读写两种案例来演示其实际应用。本文将使用 <script setup> 语法,这是 Vue 3 中推荐的一种更简洁的写法。


1. 计算属性的基本概念

计算属性是通过 computed 函数创建的,它接收一个 getter 函数作为参数,并返回一个只读的 ref 对象。如果需要创建一个可读写的计算属性,可以传入一个包含 getset 函数的对象。

1.1 只读计算属性

只读计算属性是最常见的用法,它根据依赖的响应式数据动态计算并返回一个值。

import { ref, computed } from 'vue';

const count = ref(0);

// 只读计算属性
const doubleCount = computed(() => count.value * 2);

console.log(doubleCount.value); // 0
count.value = 5;
console.log(doubleCount.value); // 10

1.2 可读写计算属性

可读写计算属性允许我们在读取和写入时执行自定义逻辑。它通过传入一个包含 getset 函数的对象来实现。

import { ref, computed } from 'vue';

const count = ref(0);

// 可读写计算属性
const doubleCount = computed({
  get: () => count.value * 2,
  set: (newValue) => {
    count.value = newValue / 2;
  }
});

console.log(doubleCount.value); // 0
doubleCount.value = 10; // 设置 doubleCount 的值
console.log(count.value); // 5

2. 只读计算属性案例:老师信息

假设我们有一个老师的信息对象,包含姓名、年龄和教授的课程。我们可以使用只读计算属性来动态计算老师的教龄。

2.1 代码示例

<template>
  <div>
    <h2>老师信息</h2>
    <p>姓名: {{ teacher.name }}</p>
    <p>年龄: {{ teacher.age }}</p>
    <p>教龄: {{ teachingYears }}</p>
    <p>课程: {{ teacher.course }}</p>
  </div>
</template>

<script setup lang="ts">
import { reactive, computed } from 'vue';

// 定义老师信息的响应式对象
const teacher = reactive({
  name: '张老师',
  age: 40,
  course: '数学'
});

// 只读计算属性:计算教龄
const teachingYears = computed(() => teacher.age - 22);
</script>

2.2 代码解析

  1. 响应式对象

    • 使用 reactive 创建了一个包含老师信息的响应式对象 teacher
  2. 只读计算属性

    • 使用 computed 创建了一个只读计算属性 teachingYears,它根据 teacher.age 动态计算教龄。
  3. 模板中使用

    • 在模板中直接使用 teachingYears,它会随着 teacher.age 的变化自动更新。

3. 可读写计算属性案例:老师信息

假设我们需要允许用户修改老师的教龄,并自动更新老师的年龄。我们可以使用可读写计算属性来实现这一功能。

3.1 代码示例

<template>
  <div>
    <h2>老师信息</h2>
    <p>姓名: {{ teacher.name }}</p>
    <p>年龄: {{ teacher.age }}</p>
    <p>教龄: <input v-model="teachingYears" /></p>
    <p>课程: {{ teacher.course }}</p>
  </div>
</template>

<script setup lang="ts">
import { reactive, computed } from 'vue';

// 定义老师信息的响应式对象
const teacher = reactive({
  name: '张老师',
  age: 40,
  course: '数学'
});

// 可读写计算属性:教龄
const teachingYears = computed({
  get: () => teacher.age - 22,
  set: (newValue) => {
    teacher.age = newValue + 22;
  }
});
</script>

3.2 代码解析

  1. 响应式对象

    • 使用 reactive 创建了一个包含老师信息的响应式对象 teacher
  2. 可读写计算属性

    • 使用 computed 创建了一个可读写计算属性 teachingYears
    • get 函数根据 teacher.age 计算教龄。
    • set 函数根据用户输入的教龄更新 teacher.age
  3. 双向绑定

    • 在模板中使用 v-model 绑定 teachingYears,用户可以通过输入框修改教龄。
    • 修改教龄后,teacher.age 会自动更新,并触发视图重新渲染。

4. 总结

  • 只读计算属性

    • 适用于根据响应式数据动态计算并返回一个值的场景。
    • 通过 computed 函数传入 getter 函数实现。
  • 可读写计算属性

    • 适用于需要在读取和写入时执行自定义逻辑的场景。
    • 通过 computed 函数传入包含 getset 函数的对象实现。
  • <script setup> 语法

    • 使用 <script setup> 语法可以让代码更简洁,减少模板和逻辑之间的切换。
    • 适合在 Vue 3 项目中广泛使用。

通过本文的案例和代码示例,希望你能更好地理解 Vue 3 中计算属性的使用,并在实际项目中灵活运用它们来管理复杂的逻辑!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

链表的介绍

目录 引言优缺点与链表相似的数据结构注意事项单向链表的实现基础实现创建类创建成员变量创建特殊方法 增加数据push_back方法insert方法 删除数据del_back方法del_index方法 clear方法查询数据at方法与重载的中括号运算符toArray方法indexOf方法 修改数据获取链表大小测试方法…

【AIGC学习笔记】扣子平台——精选有趣应用,探索无限可能

背景介绍&#xff1a; 由于近期业务发展的需求&#xff0c;我开始接触并深入了解了扣子平台的相关知识&#xff0c;并且通过官方教程自学了简易PE工作流搭建的技巧。恰逢周会需要准备与工作相关的分享主题&#xff0c;而我作为一个扣子平台的初学者&#xff0c;也想探索一下这…

DeepSeek-R1部署教程(基于Ollama)

虽说在过年&#xff0c;但不能忘了学习。这几天科技圈最火的莫过于deepseek&#xff0c;我抽空也学习一下deepseek的部署过程。 1、下载Ollama并安装 https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe 下载好后双击直接运行。 2、安装deepseek …

jenkins-k8s pod方式动态生成slave节点

一. 简述&#xff1a; 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式&#xff0c;Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务&#xff0c;从而充分利用集群资源并实现更好的隔离性…

力扣面试150 快乐数 循环链表找环 链表抽象 哈希

Problem: 202. 快乐数 &#x1f469;‍&#x1f3eb; 参考题解 Code public class Solution {public int squareSum(int n) {int sum 0;while(n > 0){int digit n % 10;sum digit * digit;n / 10;}return sum;}public boolean isHappy(int n) {int slow n, fast squa…

【C++】设计模式详解:单例模式

文章目录 Ⅰ. 设计一个类&#xff0c;不允许被拷贝Ⅱ. 请设计一个类&#xff0c;只能在堆上创建对象Ⅲ. 请设计一个类&#xff0c;只能在栈上创建对象Ⅳ. 请设计一个类&#xff0c;不能被继承Ⅴ. 请设计一个类&#xff0c;只能创建一个对象&#xff08;单例模式&#xff09;&am…

LLM 推理

https://www.bilibili.com/video/BV16yqeYhELh/ 大模型推理加速目标&#xff1a;高吞吐、低延迟 TGI vLLM SGLang LMDeploy 商汤 和 上海人工智能实验室 一起开发 缺点 性能对比 分析总结 https://www.bilibili.com/video/BV16yqeYhELh/ 大模型推理加速目标&#xff1a;高吞吐…

UE(UltraEdit) 配置简易C/C++编译运行环境

该类型其他帖子 EmEditor 配置简易C/C 编译运行环境_emeditor 代码运行-CSDN博客 RJ TextEd 配置简易C/C 编译运行环境-CSDN博客 这种配置适合ACM竞赛&#xff0c;即要求不使用现代IDE&#xff0c;又想用一个比较好用、至少支持代码高亮的编辑器。 前提条件 1.Mingw GCC 已…

XSS 漏洞全面解析:原理、危害与防范

目录 前言​编辑 漏洞原理 XSS 漏洞的危害 检测 XSS 漏洞的方法 防范 XSS 漏洞的措施 前言 在网络安全的复杂版图中&#xff0c;XSS 漏洞&#xff0c;即跨站脚本攻击&#xff08;Cross - Site Scripting&#xff09;&#xff0c;是一类极为普遍且威胁巨大的安全隐患。随着互…

Alfresco Content Services dockerCompose自动化部署详尽操作

Alfresco Content Services docker社区部署文档 Alfresco Content Services简介 Alfresco Content Services&#xff08;简称ACS&#xff09;是一款功能完备的企业内容管理&#xff08;ECM&#xff09;解决方案&#xff0c;主要面向那些对企业级内容管理有高要求的组织。具体…

LCR 139.训练计划 I

目录 题目过程解法双指针法&#xff08;两端开始&#xff09;快慢指针 题目 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性&#xff0c;需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 过…

AboutDialog组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口&#xff0c;和上一章回中介绍的Al…

Redis学习之哨兵二

一、API 1.sentinel masters:展示被监控的主节点状态及相关的统计信息 2.sentinel master <master name>:展示指定的主节点的状态以及相关的统计信息 3.sentinel slaves <master name>:展示指定主节点的从节点状态以及相关的统计信息 4.sentinel sentinels <mas…

03链表+栈+队列(D2_栈)

目录 讲解一&#xff1a;栈 一、基本介绍 二、代码示例 ------------------------------ 讲解二&#xff1a;单调栈 一、基本介绍 二、适用场景 三、情形示例 1. 寻找左边第一个小于它的数 2. 寻找左边第一个小于它的数的下标 3. 寻找右边第一个大于它的数 4. 寻找右…

春晚魔术中的数学知识

蛇年春晚刘谦魔术又和大家普及了一下编程中的冒泡排序法&#xff0c;思考深入一点&#xff0c;它还涉及到群论和组合数学中的一些知识。 游戏规则和操作步骤&#xff0c;任意打乱三种餐具作为初始状态&#xff1a; 1.筷子和左边的东西互换&#xff0c;如果筷子就在左边&#…

OpenCV:开运算

目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 OpenCV&#xff1a;闭运算-CSDN博客 …

基于Springboot的健身房管理系统【附源码】

基于Springboot的健身房管理系统 效果如下&#xff1a; 系统登陆页面 管理员主页面 器材类型管理页面 健身房管理页面 教练管理页面 用户管理页面 个人信息页面 课程管理页面 研究背景 随着健康意识的不断增强和人们生活水平的提高&#xff0c;健身房已经成为了现代城市中不…

扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)

在数字化时代&#xff0c;音频内容的重要性不言而喻。无论是在线课程、有声读物&#xff0c;还是各种多媒体应用&#xff0c;音频都是传递信息、增强体验的关键元素。扣子平台的音频功能&#xff0c;为开发者和内容创作者提供了一个强大而灵活的工具&#xff0c;让音频的使用和…

初始Python篇(8)—— 异常

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 异常介绍 异常的处理 try-except try-except-else try-except-else-finally 异常的抛出 常见的异常类型 异常介绍 在…

SSM-MyBatis-总结

文章目录 一、Hello MyBatis1.1 流程1.2 总结 二、Crud 的一些注意点三、参数传递3.1 #{ } VS ${ }3.2 单、复参数传递&#xff08;1&#xff09;单参数&#xff08;2&#xff09;多参数 -- Param&#xff08;3&#xff09;总结 四、查询结果返回--结果封装4.1 ResultType 一般…