我是靠谱客的博主 缓慢向日葵,最近开发中收集的这篇文章主要介绍Vue中使用定时器setInterval和setTimeout,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

js中定时器有两种,一个是循环执行setInterval,另一个是定时执行setTimeout

一、循环执行(setInterval)
顾名思义,循环执行就是设置一个时间间隔,每过一段时间都会执行一次这个方法,直到这个定时器被销毁掉

用法是setInterval(“方法名或方法”,“延时”), 第一个参数为方法名或者方法,注意为方法名的时候不要加括号,第二个参数为时间间隔

常见方法。在data中声明一个变量,定时器绑定到变量中,然后在beforeDestory中销毁这个定时器
举个例子:
方案一:
首先我在data函数里面进行定义定时器名称


<template>
  <section>
    <h1>hello world~</h1>
  </section>
</template>
<script>
  export default {
    data() {
      return {
        timer: null	// 定时器名称  
      };
    },
    mounted() {		// 定时器一般写mounted() 生命周期内
     this.timer = (() => {
   			 // 某些操作
   			 console.log(1);
		}, 1000)		// 1000毫秒
    },
    // 最后在beforeDestroy()生命周期内清除定时器:
    beforeDestroy() {
      clearInterval(this.timer);
      this.timer =  null;
    }
  };
</script>

方案一有两点不好的地方,引用尤大的话来说就是:

  1. 它需要在这个组件实例中保存这个 timer,如果可以的话最好只有生命周期钩子可以访问到它。这并不算严重的问题,但是它可以被视为杂物。
  2. 我们的建立代码独立于我们的清理代码,这使得我们比较难于程序化的清理我们建立的所有东西。

方案二:
通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时

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

综合来说,我们更推荐使用方案2,使得代码可读性更强,一目了然。

二、定时执行 (setTimeout)
定时执行setTimeout是设置一个时间,等待时间到达的时候只执行一次,但是执行完以后定时器还在,只是没有运行

用法是setTimeout(“方法名或方法”, “延时”); 第一个参数为方法名或者方法,注意为方法名的时候不要加括号,第二个参数为时间间隔

<template>
  <section>
    <h1>hello world~</h1>
  </section>
</template>
<script>
  export default {
    data() {
      return {
        timer: null,	// 定时器名称  
      };
    },
    mounted() {
      this.timer = setTimeout(() => {		// 定时器一般写mounted() 生命周期内
       // 某些操作
		console.log(1)
	},1000);		// 1000毫秒
    },
    beforeDestroy() {	// 最后在beforeDestroy()生命周期内清除定时器:
      clearTimeout(this.timer);	
      this.timer =  null;
    }
  };
</script>

本人总结定时器两点缺一不可:

  1. 在mounted生命周期内设置定时器setInterval或setTimeout
  2. 在beforeDestory生命周期内清除一下定时器,方法 clearInterval()或者 clearTimeout() ,意思就是 需要在页面销毁的时候清除掉,不然会一直存在,消耗性能,最后奔溃浏览器!

若有错误的地方麻烦指正一下写在评论区,多谢!

最后

以上就是缓慢向日葵为你收集整理的Vue中使用定时器setInterval和setTimeout的全部内容,希望文章能够帮你解决Vue中使用定时器setInterval和setTimeout所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部