Vue 3 中 watch 和 watchEffect 的清理函数到底解决什么问题?
在 Vue 3 的 Composition API 里,watch 和 watchEffect 都支持一个很多人见过但没深究的 onCleanup 回调。它最常见的出现场景是异步请求竞态:当侦听的数据频繁变化时,上一次请求还没返回,新请求已经发出,如果先发出的请求后返回,界面就会显示过期数据。除此之外,像防抖、取消订阅、清理定时器、中止 fetch 这类副作用,也会用到这个清理函数。它的本质是让侦听器在重新执行之前或组件卸载之后,有机会把上一次产生的副作用停掉。这篇文章会从竞态的成因讲起,对比 watch 和 watchEffect 的清理时机,给出 fetch 和定时器落地写法,并说明为什么...