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 相关文章推荐
有一段有意思的代码-javascript现实多行信息
Aug 26 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
Nov 19 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
JS中判断null的方法分析
Nov 21 Javascript
整理一些最近经常遇到的前端面试题
Apr 25 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 Javascript
通过JS运行机制的角度说说作用域
Mar 12 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 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运算符的知识大全
2011/11/03 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
js实现列表按字母排序
2020/08/11 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
python验证码识别的实例详解
2016/09/09 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
如何基于线程池提升request模块效率
2020/04/18 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
市场营销调查计划书
2014/05/02 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
手机被没收的检讨书
2014/10/04 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
详解jQuery的核心函数和事件处理
2022/02/18 jQuery