Vue 使用 $once 解决定时器问题

比如有这么个功能:在a页面写一个定时器,让它每秒钟打印一个1,然后跳转到b页面。但是此时定时器依然在执行,这样是非常消耗性能的。

大多数人的解决方法:

data() {
  return {
      picker: null  // 定时器名称
  }
}

// 使用定时器
this.picker= (() => {
  // someting
}, 1000)

// 清除定时器:
beforeDestroy() {
  clearInterval(this.picker)
  this.timer = null
}

引用Vue.js官方文档对于这一解决方法存在的不妥的分析:
在这里插入图片描述
最优的解决方法是使用 $once 这个事件侦听器器在定义完定时器之后的位置来清除定时器:

const picker= setInterval(() =>{
  // something
}, 500)
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {
    clearInterval(picker)
})

这种方法解决了上述两个问题,且代码可读性更强,一目了然,更推荐使用。

关于 $once$off$on 的用法Vue.js的官方文档都有相应的示例,可移步这里查看。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大杯美式不加糖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值