Vue 3 watchEffect 怎么实现验证码冷却时间的自动倒数

冬婷小哥_7198

冬婷小哥_7198

2026-10-21

238人浏览

原创

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

vue 3 watcheffect 怎么实现验证码冷却时间的自动倒数

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),否则每次重运行都会丢失引用,导致无法清除。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习