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

Vue3学习(4)- computed的使用

1. 简述与使用

作用:computed 用于基于响应式数据派生出新值,其值会自动缓存并在依赖变化时更新。

  • ​缓存机制​:依赖未变化时直接返回缓存值,避免重复计算(通过 _dirty 标志位实现)。
  • ​响应式更新​:依赖数据变更时触发重新计算(通过 Vue 的 effect 依赖追踪系统)。

如下图片:

在这里插入图片描述

<template><div class="person">姓:<input type="text" v-model="firstName"> <br>名:<input type="text" v-model="lastName"> <br>全名:<span>{{fullName}}</span> <br><button @click="changeFullName">全名改为:li-si</button></div>
</template><script setup lang="ts" name="App">import {ref,computed} from 'vue'let firstName = ref('zhang')let lastName = ref('san')// 计算属性——只读取,不修改/* let fullName = computed(()=>{return firstName.value + '-' + lastName.value}) */// 计算属性——既读取又修改let fullName = computed({// 读取get(){return firstName.value + '-' + lastName.value},// 修改set(val){console.log('有人修改了fullName',val)firstName.value = val.split('-')[0]lastName.value = val.split('-')[1]}})function changeFullName(){fullName.value = 'li-si'} 
</script>

2. 与 methods 的区别

  • 缓存​: computed 依赖不变时复用结果,methods 每次调用重新执行;
  • 使用场景​:computed 纯数据派生(如过滤、聚合),methods 事件处理或需主动触发的逻辑;
  • 模板调用​:computed 直接引用(如 {{ value }}),methods 需调用(如 {{ fn() }})

3. 使用方法详解

3.1 ​基础写法(只读)​

传入 ​getter 函数,返回只读的 Ref 对象:

<script setup>
import { ref, computed } from 'vue';
const count = ref(0);
const double = computed(() => count.value * 2); // 自动追踪 count 依赖
</script>

适用场景​:模板中简化复杂表达式(如数据格式化、条件判断)。

3.2 完整写法(可读写)

传入包含 ​get/set 的对象,支持双向绑定:

<template><div class="person">姓:<input type="text" v-model="firstName">名:<input type="text" v-model="lastName"><p>{{ fullName }}</p></div>
</template>
<script lang="ts">
export default {name: "Person"
}
</script><script setup lang="ts">
import {computed, ref} from "vue";const firstName = ref('John');
const lastName = ref('Doe');
const fullName = computed({// 写法1// get: () => {//   return firstName.value+" "+lastName.value// },get: () => `${firstName.value} ${lastName.value}`,set: (newValue) => {[firstName.value, lastName.value] = newValue.split(' ');}
});
// 修改 fullName 会触发 set 方法
fullName.value = 'Jane Smith';
</script>
<style scoped lang=less>
</style>

适用场景​:v-model 绑定派生数据(如表单联动)

3.3 传递参数

需在计算属性内部返回函数​:

<template><div class="person"><div><div v-for="item in filterList(3)" :key="item">{{item}}</div></div></div>
</template>
<script lang="ts">
export default {name: "Person"
}
</script><script setup lang="ts">
import {computed, ref} from "vue";const list = ref([1, 2, 3]);
//值传递
const filterList = computed(()=> (max) => list.value.filter((item) => item < max));</script>
<style scoped lang=less>
</style>
http://www.lryc.cn/news/2404026.html

相关文章:

  • 手机上网可以固定ip地址吗?详细解析
  • 电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
  • 如何在Unity中实现点击一个按钮跳转到哔哩哔哩
  • DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • 【数据结构】6. 时间与空间复杂度
  • Python 函数全攻略:函数进阶(生成器、闭包、内置函数、装饰器、推导式)
  • 基于springboot的藏文古籍系统
  • 重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
  • 声音信号的基频检测(python版本)
  • STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
  • Hive开窗函数的进阶SQL案例
  • 【JJ斗地主-注册安全分析报告】
  • 《绩效管理》要点总结与分享
  • Microsoft前后端不分离编程新风向:cshtml
  • 【评测】用Flux的图片文本修改的PS效果
  • 青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统
  • 数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20250607)
  • springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
  • AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
  • 机器学习:load_predict_project
  • OkHttp 3.0源码解析:从设计理念到核心实现
  • 【storage】
  • 微信小程序带参分享、链接功能
  • JVM 垃圾回收器 详解
  • FreeRTOS任务之深入篇
  • Linux 系统、代码与服务器进阶知识深度解析
  • 人工智能--AI换脸
  • NLP学习路线图(二十七):Transformer编码器/解码器
  • 【机器学习】支持向量机实验报告——基于SVM进行分类预测