记一次vue3页面倒计时(定时器)切换页面问题

场景:从含有定时器的页面切换到其他页面时,创建的定时器没有销毁,定时器继续执行,相应的事件也一直在进行;

换种说法:

tab一共有三个,分别对应其A页面、B页面、C页面,A页面中有个计时器,当切换tab到B页面或者C页面,A页面中的计时器必须要清除

页面展示:

解决方案:

import {onMounted, onBeforeUnmount} from 'vue'
   onBeforeUnmount(() => {
      console.log('mounted!')
      clearInterval(times)

    })

源代码:

     <div class="right">
                <span style="width: 105px;">自动刷新:{{timer}}</span><a-switch v-model="value" checked-value="yes" unchecked-value="no" @change="stop"></a-switch>
                <a-tooltip content="数据导出">
                  <a-button class="btn1"><icon-download :size="20" /></a-button>
                </a-tooltip>

     </div>
//倒计时
    const value=ref('yes')
    const timer = ref(200);
    let times=setInterval(timess,1000)
    function stop(){      
      if(value.value=='yes'){
        times=setInterval(timess,1000)
      }else{
        clearInterval(times)
      }
    }
    function timess(){
      if (timer.value === 0) {
          doRefresh()
          onSearchCount()
          timer.value = 200;
          return;
      }else {
          timer.value--;
        }
    }

   onBeforeUnmount(() => {
      console.log('mounted!')
      clearInterval(times)

    })

思路:

vue3版本:

与 2.x 版本生命周期相对应的组合式 API

  • beforeCreate -> 使用 setup()
  • created -> 使用 setup()
  • beforeMount -> onBeforeMount
  • mounted -> onMounted
  • beforeUpdate -> onBeforeUpdate
  • updated -> onUpdated
  • beforeDestroy -> onBeforeUnmount
  • destroyed -> onUnmounted
  • errorCaptured -> onErrorCaptured

setup相当于之前的created周期:创建时

        onBeforeMount:DOM即将挂载

        onMounted:DOM挂载完毕

        onBeforeUpdate:DOM即将更新

        onUpdated:DOM更新完毕

        onBeforeUnmount:即将销毁

        onUnmounted:销毁完毕

可以发现:

  1. beforeCreatecreatedsetup 几乎是同时进行的,所以可以把写在beforeCreatecreated 这两周期的代码直接写在 setup 里即可。
  2. 命名都形如 onXXX
  3. beforeDestroydestroyed 改为 onBeforeUnmountonUnmounted

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值