Vue 词条目录
前端Wiki/词条/计算属性与侦听器

计算属性与侦听器

定义computed 从响应式数据派生新值(带缓存);watch 在数据变化时执行副作用

computed 是「派生状态」:const total = computed(() => price.value * count.value)。它带缓存——依赖不变时多次读取只算一次,依赖变了才重算,这是它相对.methods 的核心优势。模板里的复杂表达式都应该用 computed 替代。

watch 是「数据变了做点什么」:const stop = watch(n, (nv, ov) => {...})。典型场景:监听请求参数变化去请求接口、监听开关状态改 document.title。watch 默认懒执行(仅变化时触发)、深度监听对象要 { deep: true }、想立即执行一次加 { immediate: true }。记住分工:派生显示用 computed,异步/副作用用 watch。

HTML
<div id="app">
  <input v-model="price"> × <input v-model="count">
  <p>合计 {{ total }}</p>            <!-- computed 缓存 -->
</div>
<script>
  const { createApp, ref, computed, watch } = Vue;
  createApp({
    setup() {
      const price = ref(10), count = ref(2);
      // 派生状态:price/count 不变时 total 只计算一次
      const total = computed(() => price.value * count.value);

      // 副作用:合计超 100 就提示
      watch(total, nv => {
        if (nv > 100) console.warn('超出预算:', nv);
      }, { immediate: true });      // 立即先执行一次

      return { price, count, total };
    },
  }).mount('#app');
</script>
⚠ 常见误区
🔗 相关词条ref 与 reactive组合式 APIv-model 双向绑定
← 返回来源章节计算属性