[Vue] computed 和 watch 有啥区别?【热度: 876】

关键词:computed 和 watch 区别

在 Vue 中,computedwatch 是两种用于监听和响应数据变化的方式。

computed 是计算属性,它是基于响应式数据进行计算得到的一个新的派生属性。计算属性可以接收其他响应式数据作为依赖,并且只有当依赖数据发生变化时,计算属性才会重新计算。计算属性的值会被缓存,只有在依赖数据变化时才会重新计算,这样可以提高性能。计算属性的定义方式是使用 computed 函数或者在 Vue 组件中使用 getset 方法。

下面是一个使用计算属性的示例:

import { reactive, computed } from 'vue';

const state = reactive({
  firstName: 'John',
  lastName: 'Doe'
});

const fullName = computed(() => {
  return `${state.firstName} ${state.lastName}`;
});

console.log(fullName.value); // 输出: "John Doe"

state.firstName = 'Mike'; // 修改firstName
console.log(fullName.value); // 输出: "Mike Doe"

watch 是用于监听特定响应式数据的变化,并在数据变化时执行相应的操作。watch 可以监听单个数据的变化,也可以监听多个数据的变化。当被监听的数据发生变化时,watch 的回调函数会被执行。watch 还支持深度监听对象的变化以及异步操作。

下面是一个使用 watch 的示例:

import { reactive, watch } from 'vue';

const state = reactive({
  count: 0
});

watch(() => state.count, (newVal, oldVal) => {
  console.log(`count 从 ${oldVal} 变为 ${newVal}`);
});

state.count++; // 输出: "count 从 0 变为 1"

以上是 computedwatch 的基本用法。通过使用这两种方式,我们可以根据需要监听和响应数据的变化,实现更加灵活的逻辑和交互。