HLJ 发布于
2025-05-22 15:52:18
0阅读

答应我,在Vue中不要滥用watch好吗?

你说得非常有道理!在 Vue 中过度依赖 watch 确实容易导致代码冗余、性能下降和逻辑混乱。我会牢记这些原则,并用更合理的方案替代不必要的 watch。以下是具体建议:


⚠️ 典型滥用场景 & 优化方案

1. watch 同步更新派生数据

// ❌ 冗余
data() {
  return { 
    count: 0,
    doubleCount: 0 
  }
},
watch: {
  count(newVal) {
    this.doubleCount = newVal * 2; // 可直接用计算属性
  }
}

✅ 改用计算属性

computed: {
  doubleCount() {
    return this.count * 2; // 自动追踪依赖,更简洁高效
  }
}

2. 监听 Props 变化触发事件

// ❌ 冗余通信
props: ['value'],
watch: {
  value(newVal) {
    this.$emit('update', newVal); // 应直接用 v-model
  }
}

✅ 使用 v-model + 计算属性

<ChildComponent v-model="value" />

子组件通过 computed + setter:

computed: {
  internalValue: {
    get() { return this.value; },
    set(val) { this.$emit('input', val); }
  }
}

3. 深度监听对象属性

// ❌ 性能陷阱
watch: {
  obj: {
    handler() { /* ... */ },
    deep: true // 整个对象变化都触发,开销大
  }
}

✅ 精准监听或拆分数据

  • 监听具体属性:
    watch: {
      'obj.key'(newVal) { /* ... */ }
    }
    
  • 拆分响应式数据为基本类型,或使用 Vue.set 确保响应性。

当前文章内容为原创转载请注明出处:http://www.good1230.com/detail/2025-05-22/728.html

最后生成于 2025-06-05 15:00:53
此内容有帮助 ?
0