Vue 3 中 watch 和 watchEffect 的竞态问题与取消策略
在 Vue 3 组合式 API 里,watch 和 watchEffect 是处理副作用的常用工具。一个典型场景是搜索框输入联想:用户连续输入时,每次变化都触发异步请求,但网络响应顺序并不保证与请求顺序一致。如果先发出的请求后返回,就会用旧数据覆盖新结果,这就是竞态条件。更麻烦的是,组件在请求返回前被卸载,回调里仍然尝试修改已失效的响应式状态,控制台会抛出警告或内存泄漏。很多人只在请求库层面加 cancelToken,却忽略了 Vue 的副作用系统本身也提供了清理机制。这篇文章从实际代码出发,说明如何用 onCleanup 与 AbortController 配合,让 watch 和 watc...