Vue Academy · 课时

Composition API 中的计算属性与侦听

使用 computed() 派生状态,以及使用 watch() 和 watchEffect() 处理副作用。

第 4 / 4 课13 个步骤

Composition API 中的计算属性与侦听 是 CoddyKit 上的免费 Vue Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Vue Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Vue Academy 课程共包含 4 节课。

派生状态并响应变化

响应式状态只是其中一半。您还需要从状态中派生新值,并响应变化。组合式 API 为此提供了 computed、watch 和 watchEffect。

使用 computed 获取派生值

computed() 接收一个获取函数,并返回一个 ref,其值派生自其他响应式状态。在 JS 中使用 .value 访问它,在模板中则会自动解包。

import { ref, computed } from 'vue'

const count = ref(2)
const doubled = computed(() => count.value * 2)
console.log(doubled.value) // 4

computed 具有惰性和缓存特性

只有当某个响应式依赖发生变化时,computed 才会重新计算。如果在没有变化的情况下读取它十次,获取函数只会运行一次,之后会重复使用缓存的结果。

这使 computed 非常适合计算成本较高的派生值。

computed 会自动更新

修改依赖后,computed 会在下次读取时更新。您不需要手动调用它。

const count = ref(2)
const doubled = computed(() => count.value * 2)
count.value = 5
console.log(doubled.value) // 10

使用 watch 处理副作用

watch() 会观察一个响应式来源,并在它发生变化时运行回调函数。回调函数会接收新值和旧值。

import { ref, watch } from 'vue'

const count = ref(0)
watch(count, (newVal, oldVal) => {
  console.log('changed from', oldVal, 'to', newVal)
})

watch 默认具有惰性

与 computed 不同,watch 不会立即运行回调函数,而是等待第一次变化。请将它用于副作用,例如记录日志、获取数据和保存到存储中。

观察多个来源

将来源组成数组传给 watch,即可同时观察多个值。回调函数会接收由新值和旧值组成的数组。

watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
  console.log(newCount, newName)
})

观察获取函数

若要观察响应式对象的某个属性,请传入一个获取函数。直接观察对象时,只有发生深层变化才会触发,这可能会令人困惑。

const state = reactive({ count: 0 })
watch(() => state.count, (newVal) => {
  console.log('count is', newVal)
})

watchEffect:立即运行并自动跟踪

watchEffect() 会立即运行其函数,并在函数内部使用的任何响应式值发生变化时重新运行。您不需要列出依赖项,因为它们会被自动跟踪。

import { ref, watchEffect } from 'vue'

const count = ref(0)
watchEffect(() => {
  console.log('count is', count.value)
})
// logs immediately, then on every change

watch 与 watchEffect

  • watch:来源明确、具有惰性,并提供旧值和新值。
  • watchEffect:自动跟踪依赖项、立即运行,无法访问旧值。

当您需要先前的值或希望进行精确控制时,使用 watch。对于快速实现响应式副作用,使用 watchEffect。

computed 与 watch 的区别

如果您需要一个新的派生值,请使用 computed。如果您需要在发生变化时执行某项操作,请使用 watch 或 watchEffect。不要使用 watch 重新计算值——这正是 computed 的用途。

快速检查

请选择正确的响应式辅助工具。

回顾

现在您已经了解如何派生值以及响应变化:

  • computed 会创建惰性求值且经过缓存的派生值。
  • watch 会响应特定数据源,并提供新值和旧值;它是惰性的。
  • watchEffect 会立即执行,并自动追踪依赖。
  • 值应使用 computed,副作用应使用 watch/watchEffect。
免费开始

用 AI 导师学习 HTML — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
42
课程
156

常见问题解答

「Composition API 中的计算属性与侦听」课时是免费的吗?

是的 — 「Composition API 中的计算属性与侦听」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Vue Academy 课程的其余内容,请升级到 CoddyKit PRO。 Vue Academy 课程共包含 4 节课。

「Composition API 中的计算属性与侦听」这节课中我会学到什么?

使用 computed() 派生状态,以及使用 watch() 和 watchEffect() 处理副作用。 你通过在浏览器中直接运行的动手代码来练习 Vue Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Vue Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Vue Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Composition API 中的计算属性与侦听」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Vue Academy 课中编写并运行代码吗?

能。每节 Vue Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么使用 Composition API?
  2. setup() 函数与响应式变量
  3. ref 与 reactive:何时使用哪一个
  4. Composition API 中的计算属性与侦听
← 返回 Vue Academy