学习vue第九天 计算属性与侦听器

📚 派对邀请函:计算属性 & 侦听器

时间:30 分钟

地点:Vue3 的响应式乐园

着装:轻松休闲,带上笑容和键盘 🕺💃


🎯 开场脱口秀:为什么需要他们俩?

1️⃣ 模板里直接写表达式?------"让 HTML 做数学作业,太残忍!"

html 复制代码
<h3>{{ firstName + ' ' + lastName }}</h3>

👎 缺点:

  • 模板=作文本,你却让它算口算?排版乱、难维护
  • 重复计算,性能像龟速 Wi-Fi

2️⃣ methods 救场?------"每次客人来都重新装修客厅"

html 复制代码
<h3>{{ getFullName() }}</h3>

👎 缺点:

  • 组件每渲染一次 = 函数再跑一次,缓存?不存在的!
  • 输入框抖一下,函数跑十圈,CPU 加班加到秃头

3️⃣ computed 闪亮登场------"Excel 公式附体,只算一次,终身缓存!"

html 复制代码
<h3>{{ fullName }}</h3>

✅ 优点:

  • 依赖不变,Vue 连眼皮都懒得抬,直接给缓存
  • 模板清爽像刚敷完面膜
  • 响应式:数据变,结果秒更新,像电梯门自动开合

🧮 计算属性(computed)------"佛系计算器"

核心心法:

  1. 能算就行,绝不副作用(别在里面改 data,会被 Vue 拉小黑屋)
  2. 有缓存,像省钱小能手,只买一次单
  3. 必须 return,不然模板拿到空气

举个栗子🌰:

js 复制代码
computed: {
  fullName() {
    console.count('★ computed 执行次数')
    return this.firstName + ' ' + this.lastName
  },
  discountPrice() {
    return this.price > 100 ? this.price * 0.8 : this.price
  }
}
  • 模板里 {``{ fullName }} 像读变量,其实背后是"懒加载公式"
  • 打开控制台,依赖不变的话,计数器只涨一次------缓存实锤!

适用场景小抄:

  • 字符串拼接(姓名、地址、标题)
  • 数字格式化(折扣、总价、税额)
  • 列表过滤/排序(搜索关键字高亮)
  • 只要"显示结果",先想到 computed

👀 侦听器(watch)------"监控摄像头 + 自动跑腿"

核心心法:

  1. 数据一变,立刻报警,还能拿到新旧"案底"
  2. 擅长副作用:发请求、存本地、跳转、弹广告(咳咳)
  3. 支持异步,写 async/await 也 OK,记得 try-catch 别甩锅

举个栗子🌰:

js 复制代码
watch: {
  keyword(newVal, oldVal) {
    console.log(`🔍 搜索词从"${oldVal}"->"${newVal}"`)
    this.searchProducts(newVal) // 异步搜商品
  },
  age(newAge) {
    if (newAge >= 18) this.canVote = true
  }
}
  • 用户每敲一次键盘,摄像头就记录一次,然后派跑腿去后台拉数据
  • 异步搜索、保存草稿、表单验证------全是它的主场

常见误区警示牌:

  • ❌ 用 watch 算总价(又贵又慢)
  • ✅ 用 watch 保存总价到 localStorage(副作用专业户)

⚖️ 选择指南------"点菜不纠结"

需求 点菜
只是算个值给模板看 点 computed 套餐
数据变化要干活(请求、存储、跳转) 点 watch 大份
既要新值又要副作用 先 computed 算值,再 watch 这个值

🏃‍♂️ 30 分钟速成路径(防迷路地图)

  1. 10 min → 敲 demo 03:把 firstName + lastName 弄成 fullName,感受缓存
  2. 10 min → 敲 demo 06:输入关键字,watch 帮你异步搜索
  3. 10 min → 敲 demo 10:购物车总价 computed + 本地缓存 watch,双剑合璧

小贴士:console.log / console.count 是调试神器,多打几行,让控制台替你说话!


💡 记忆顺口溜

computed 懒懒算,缓存像省钱;

watch 勤快跑,变化就出门;

一个负责"出新值",一个负责"干苦力";

别让他们干反活,代码清爽不脱发!


🎁 彩蛋:调试彩蛋包

js 复制代码
// 看 computed 缓存
computed: { fullName() { console.count('computed 运行'); return ... } }

// 看 watch 变化轨迹
watch: { xxx(n, o) { console.log(`旧->新:${o} → ${n}`) } }

打开控制台,计数器只涨一次 = 缓存生效;箭头顺序对 = 监听正确

让日志飞一会儿,你会对它们的爱更深一层 ❤️


结语

两兄弟已经介绍完毕:

  • computed ------ 佛系计算器,能缓存、会返回值,模板好伴侣
  • watch ------ 监控摄像头,数据变动就跑腿,异步副作用全靠它

带上顺口溜和地图,去敲代码吧!

记住:别让他们干反活,你的代码会更优雅,头发也更安全!

相关推荐
慎独4138 小时前
重置学习系统:唤醒孩子的“双引擎”学习力
学习
搬砖的阿wei8 小时前
CSS常用选择器总结
前端·css
近津薪荼9 小时前
优选算法——双指针专题7(单调性)
c++·学习·算法
峥嵘life9 小时前
Android 16 EDLA测试STS模块
android·大数据·linux·学习
Trae1ounG9 小时前
Vue Iframe
前端·javascript·vue.js
阿部多瑞 ABU9 小时前
`tredomb`:一个面向「思想临界质量」初始化的 Python 工具
前端·python·ai写作
invicinble9 小时前
学习的门道和思路
java·开发语言·学习
比特森林探险记9 小时前
React API集成与路由
前端·react.js·前端框架
爱上妖精的尾巴10 小时前
8-1 WPS JS宏 String.raw等关于字符串的3种引用方式
前端·javascript·vue.js·wps·js宏·jsa