watcheffect 通过自动追踪 countdown 变化来启停倒计时,配合模块级 timer 变量实现定时器清理与重启,组件卸载时需手动清除避免内存泄漏。

watchEffect 本身不直接控制倒计时,但它能自动追踪响应式数据变化,并在依赖更新时重新执行——这正好适合监听“是否可点击”状态、触发或清理倒计时逻辑。
用 ref 控制倒计时状态和剩余秒数
定义两个响应式变量:countdown 存剩余秒数,isDisabled 表示按钮是否禁用(通常与 countdown > 0 同步):
const countdown = ref(0); const isDisabled = computed(() => countdown.value > 0);
在 watchEffect 中启动/清除定时器
当用户点击发送验证码时,把 countdown 设为 60;watchEffect 会立即检测到变化,启动倒计时。关键点在于:每次重新运行时,先清除上一次的定时器(避免重复叠加),再根据当前值决定是否继续倒数:
let timer = null;
watchEffect(() => {
if (countdown.value {
countdown.value--;
}, 1000);
});
⚠️ 注意:timer 必须是模块级变量(不能用 ref),否则每次重运行都会丢失引用,导致无法清除。

