理解掌握 `watch`、`computed`、`watchEffect`

简介: 【8月更文挑战第5天】理解掌握 `watch`、`computed`、`watchEffect`

当然可以更详细地介绍Vue中的watchcomputedwatchEffect,以及它们的代码演示。以下是详细的解释和示例:

1. computed

computed属性在Vue中用于声明依赖于其他响应式状态的计算属性。这些属性是基于它们的响应式依赖进行缓存的,只有当依赖项发生变化时,才会重新计算它们的值。这使得它们非常适合执行复杂的计算,同时保持应用的性能。

特点

  • 缓存性:只有当计算属性所依赖的响应式属性发生变化时,才会重新计算。
  • 自动更新:当依赖项变化时,计算属性会自动更新其值。
  • 响应式:计算属性本身是响应式的,可以在模板中直接使用。

代码演示

<template>
  <div>
    <p>单价: {
  { price }}</p>
    <p>数量: {
  { quantity }}</p>
    <p>总价: {
  { total }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      price: 10,
      quantity: 2
    };
  },
  computed: {
    total() {
      // 当price或quantity变化时,total会重新计算
      return this.price * this.quantity;
    }
  }
}
</script>

2. watch

watch属性用于观察和响应Vue实例上数据的变化。当需要在数据变化时执行异步操作或开销较大的操作时,watch非常有用。

特点

  • 响应式:可以观察任何响应式数据的变化。
  • 灵活性:可以执行复杂的逻辑,包括异步操作。
  • 可配置:可以通过配置项来控制是否立即执行、是否深度观察等。

代码演示

<template>
  <div>
    <input v-model="query" placeholder="搜索...">
  </div>
</template>

<script>
export default {
  data() {
    return {
      query: ''
    };
  },
  watch: {
    // 观察query的变化
    query(newValue, oldValue) {
      console.log(`查询词从 "${oldValue}" 变为 "${newValue}"`);
      // 这里可以执行搜索操作
    }
  }
}
</script>

3. watchEffect

watchEffect是Vue 3中引入的一个API,用于自动地观察其回调函数中响应式引用的变化,并在它们变化时重新运行回调。与watch不同,watchEffect不需要手动指定观察的数据源,Vue会自动追踪。

特点

  • 自动追踪:Vue自动追踪回调函数中使用的响应式引用。
  • 即时执行:默认情况下,组件挂载后立即执行一次。
  • 抽象:使用时不需要明确指定观察的数据源。

代码演示

<template>
  <div>
    <p>搜索词: {
  { searchQuery }}</p>
    <button @click="increment">增加搜索次数</button>
  </div>
</template>

<script>
import { ref, watchEffect } from 'vue';

export default {
  setup() {
    const searchQuery = ref('');
    const searchCount = ref(0);

    watchEffect(() => {
      console.log(`搜索词: "${searchQuery.value}", 搜索次数: ${searchCount.value}`);
      // 这里可以执行一些副作用,如发送请求
    });

    function increment() {
      searchCount.value++;
    }

    return {
      searchQuery,
      increment
    };
  }
}
</script>

在这个例子中,watchEffect自动追踪了searchQuerysearchCount的变化,并在它们变化时重新运行了回调函数。由于我们没有在watchEffect中明确指定要观察的数据源,Vue根据回调函数中使用的响应式引用来自动追踪。

总的来说,computedwatchwatchEffect都是Vue中用于响应式数据变化的工具,但它们各自有不同的使用场景和特点。选择哪个取决于你的具体需求和偏好。

目录
相关文章
|
6月前
|
缓存 JavaScript API
在vue中,computed 和 watch 的区别和运用的场景?
在vue中,computed 和 watch 的区别和运用的场景?
79 0
|
监控 JavaScript
computed的使用
一、 computed是什么? 对于任何复杂逻辑,你都应当使用计算属性。 computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义. 然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;
|
2月前
|
缓存
Vue3 的 computed 和 watch 函数有哪些不同?
Vue3 的 computed 和 watch 函数有哪些不同?
|
6月前
|
缓存 JavaScript
Vue 中的 computed 和 watch 的区别
Vue 中的 computed 和 watch 的区别
|
6月前
|
缓存 JavaScript 前端开发
Vue的计算属性和侦听器:computed和watch的使用
【4月更文挑战第24天】Vue.js框架中的计算属性和侦听器是处理数据变化的关键特性。计算属性(computed)基于依赖缓存,仅在相关数据改变时重新计算,适合处理复杂逻辑。例如,计算总价可基于价格和数量动态更新。而侦听器(watch)在数据变化时执行回调,适用于异步操作和开销大的任务。计算属性与侦听器的主要区别在于缓存机制和应用场景,前者用于同步计算,后者用于响应数据变化后的特殊操作。理解这两者有助于优化Vue应用的性能。
|
缓存
computed和watch
computed和watch
|
6月前
|
缓存 JavaScript
对比vue中watch和computed
watch 和 computed 都是用于监听数据变化并执行相应操作的选项,但它们的使用场景和优劣势有所不同。在实际开发中,应根据具体需求选择合适的选项。
|
缓存 JavaScript
Vue 中 computed 和 watch 的区别
Vue 中 computed 和 watch 的区别
90 0
|
6月前
|
缓存 监控 JavaScript
Vue中的watch和computed有什么区别?
Vue中的watch和computed有什么区别?
43 0
|
缓存 JavaScript Serverless
computed 和 watch
computed 和 watch