computed(计算属性)和 watch(侦听器)是 Vue3 处理数据逻辑的核心 API,面试常考两者区别、使用场景,核心是分清“值派生”和“副作用”。
核心区别
一、本质不同:
computed:计算属性,是“值的派生”,依赖其他响应式数据,返回一个新的计算后的值。
watch:侦听器,是“副作用触发”,监听一个或多个响应式数据,当数据变化时执行回调函数(可做异步操作、修改其他数据等)。
二、缓存机制:
computed:有缓存,只有依赖的响应式数据发生变化时,才会重新计算;如果依赖不变,多次访问会直接返回缓存值,提升性能。
watch:无缓存,只要监听的数据发生变化,就会执行回调,无论变化后的值是否和之前一致。
三、使用场景:
computed:适合对已有数据进行加工、转换(如计算总价、拼接字符串),需要返回一个新值的场景。
watch:适合需要监听数据变化,执行异步操作(如请求接口)、复杂逻辑(如清理定时器)的场景。
补充:computed 不能做异步操作,watch 可以做异步操作。
——个人观点 · 仅供参考——