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 相关文章推荐
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
Oct 20 Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
深入理解JS中的substr和substring
Apr 26 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
vue实现单一筛选、删除筛选条件
Oct 26 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
Sony CFR 320 修复改造
2020/03/14 无线电
php函数的常用方法及注意之处小结
2011/07/10 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
js切换div css注意的细节
2012/12/10 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
高中生家长寄语大全
2014/04/03 职场文书
赡养老人协议书
2014/04/21 职场文书
物流专业自荐信
2014/05/23 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers
MySQL存储过程及语法详解
2022/08/05 MySQL