VUE简单的定时器实时刷新的实现方法


Posted in Javascript onJanuary 20, 2019

说明:我只是一个刚入门的小前端,你们可以指导我,但千万不要喷我,虽然我知道我很垃圾!人吗,都是要成长的!大佬,请多多指教!!!

我前段时间刚刚写了一个类似余股票的项目,上边的K线图是要实时去刷新的,所以要用vue做一个心跳,当然大家也可以选择用websocket,大佬们感觉肯定很简单,但是我只是一个刚入门的小前端,特此记录一下。

思路

其实思路很简单,首先要了解vue的生命周期和vue的内置函数,其思路就是先定义一个定时器,然后去定时请求后台,到最后关闭这个定时器,哈哈,是不是都是废话,但是确实如此,你们可以先去尝试一下。

这个小功能实现的自我总结

一开始我感觉很简单,不就是个心跳吗,在methods 中定义一个timer函数返回一个setInterval和一个getData函数,在timer中调用getData, 然后在created中去调用,其中就会有一个问题,就是刚进来页面不会有数据,为什么想必大家肯定会知道,就是这是调用了一个定时器只有时间到了以后才会去请求后台,这个不是很好解决吗,在created 中在调用一次getData不就好了吗,嗯,我就这样做了,虽然我感觉不是很合理,啊啊啊啊,好烦,第一次写不知道如何写,还是用代码来表达,这样比较清楚........

第一版,这样很不合理,因为这样会加载页面发送两次数据,而且还有一个很大的雷,就是setInterval在网页卸载是不会关掉,而且你再次进入这个页面时,定时器会加速,这个BUG应该是因为vue切换页面不会刷新的原因吧,请大佬指教。

<script>
  export default {
    created() {
      this.timer()
      this.getData()
    }
    methods: {
      // 这是一个获取数据
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setInterval(()=>{
          this.getData()
        },5000)
      }
    },
    destroyed() {
  clearInterval(this.timer)
    }
  }
</script>

第二版,我进行了改进,我把setInterval换成了setTimeout,因为setTimeout只执行一次,所以要靠函数去驱动它,然后我用到了updated,它也有一个弊端,就是有某一个数据更新,它就会触发,所以有时会执行多次。

<script>
  export default {
    created() {
      this.getData()
    }
    methods: {
      // 这是获取数据的函数
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setTimeout(()=>{
          this.getData()
        },5000)
      }
    },
    updated() {
     this.timer() 
    }
    destroyed() {
  clearTimeout(this.timer)
    }
  }
</script>

最终版

监听list只要它变化就去触发定时器,这样就解决了updated的多次触发。

<script>
  export default {
    data() {
      return {
        list: []  // 获取的数据列表
      }
    }
    created() {
      this.getData()
    }
    methods: {
      // 这是获取数据的函数
      getData() {
        .....
      }
      // 这是一个定时器
      timer() {
        return setTimeout(()=>{
          this.getData()
        },5000)
      }
    },
    watch: {
      list() {
      this.timer() 
      }
    }
    destroyed() {
  clearTimeout(this.timer)
    }
  }
</script>

总结

主要就是要了解vue的钩子函数。可能漏洞很多,希望大佬多多指教,还有就是第一次写,有点词穷,请大家多多担待。、

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
Feb 19 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
Vue.js实现分页查询功能
Nov 15 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
JavaScript 判断iPhone X Series机型的方法
Jan 28 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
Jan 20 #Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 #Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 #Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 #Javascript
JavaScript中concat复制数组方法浅析
Jan 20 #Javascript
JavaScript中import用法总结
Jan 20 #Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 #Javascript
You might like
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
json 定义
2008/06/10 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
js实现开关灯效果
2020/03/30 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
python 实现端口扫描工具
2020/12/18 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
小学教师自我鉴定
2013/11/07 职场文书
服装设计专业自荐书范文
2013/12/30 职场文书
专业技术职务聘任书
2014/03/29 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
学校实习推荐信
2015/03/27 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL