日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue 實現setInterval 創建和銷毀實例

瀏覽:152日期:2023-01-01 17:14:31

問題

setInterval 是間隔調用,與之類似的還有 setTimeout。這兩個 API 通常用來做 ajax 短連接輪詢數據。

比如有一個 logs.vue 是用來展示某個正在執行的進程產生的日志:

<template> <div> <p v-for='item in logList' :key='item.time'> <span>{{'[' + item.time + ']'}}</span> <span>{{ item.log }}</span> </p> </div></template><script> import { Component, Vue, Watch, Prop, Emit } from ’vue-property-decorator’ import { getLogList } from ’./api’ @Component({}) export default class extends Vue { logList = [] timer = null mounted(){ this.getData() } async getData(){ let r = await getLogList() if(r && r.logList){ this.logList = r.logList } this.timer = setTimeout(()=>{ console.log(this.timer); this.getData() }, 1000) } beforeDestory(){ clearTimeout(this.timer) this.timer = null; } }</script>

這段代碼看上去沒啥問題,但是測試的時候你會發現,有時候路由已經跳轉了,獲取進程日志的接口依然在不斷調用,甚至,有時候接口調用速度非???,一秒可能有好幾個請求。

分析

beforeDestory 是組件銷毀前的生命周期的鉤子,這個鉤子函數一定會調用,但是能不能徹底銷毀 setTimeout 呢?答案是不能。

打開控制臺就能看到不斷打印出來的 id

vue 實現setInterval 創建和銷毀實例

這是因為,每次使用 clearTimeout 清除掉的是上一次的 id, 而不是本次正要執行的,這種情況,對于使用 setInterval 也是一樣的。

根本原因在于,每次調用 getData, this.timer 是在不斷的被賦予新的值,而不是一成不變的。

在以前的原生 js 中,我們通常這樣寫:

var timer = nullfunction init(){ timer = setInterval(function(){ getData() })}function getData(){}window.onload = initwindow.onunload = function(){ clearInterval(timer)}

由于上面的 timer 始終保持一個值,所以這里的清除是有效的

解決

vue 提供了 程序化的事件偵聽器 來處理這類邊界情況

按照文檔的說法,我們的代碼可以這樣來更改

<script> import { Component, Vue, Watch, Prop, Emit } from ’vue-property-decorator’ import { getLogList } from ’./api’ @Component({}) export default class extends Vue { logList = [] // timer = null mounted(){ this.getData() } async getData(){ let r = await getLogList() if(r && r.logList){ this.logList = r.logList } const timer = setTimeout(()=>{ this.getData() }, 1000) this.$once(’hook:beforeDestroy’, function () { clearTimeout(timer) }) } }</script>

這樣寫,還解決了兩個潛在問題

在組件實例中保存這個 timer,最好只有生命周期鉤子有訪問它的權限。但是實例中的 timer 會視為雜物

如果建立代碼獨立于清理代碼,會使得我們比較難于程序化地清理所建立的東西

如果你是在項目中引入了 ts,那么可能會導致在組件銷毀的時候,定時器不能成功清除,這時候,你需要使用

const timer = window.setTimeout(()=>{ this.getData()}, 1000)this.$once(’hook:beforeDestroy’, function () { window.clearTimeout(timer)})

如果你漏掉了其中一個 window,那么很可能會遇上類似的 ts 報錯:Type ’Timer’ is not assignable to type ’number’,這是因為 node typings

It seems like you are using node typings which override setInterval() as something that returns NodeJS.Timer. If you’re running in the browser, it doesn’t make a whole lot of sense to use these,

結論

我們可以通過 程序化的事件偵聽器 來監聽銷毀我們創建的任何代碼示例

除了 setTimeout 和 setInterval ,通常還有一些第三方庫的對象示例,如 timePicker,datePicker,echarts圖表等。

mounted: function () { // Pikaday 是一個第三方日期選擇器的庫 var picker = new Pikaday({ field: this.$refs.input, format: ’YYYY-MM-DD’ }) // 在組件被銷毀之前,也銷毀這個日期選擇器。 this.$once(’hook:beforeDestroy’, function () { picker.destroy() })}

以上這篇vue 實現setInterval 創建和銷毀實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美三级第一页| 私拍精品福利视频在线一区| 欧美亚洲专区| 91久久久精品国产| 黄毛片在线观看| 91福利精品在线观看| 亚洲一区二区毛片| 韩国女主播一区二区三区| 麻豆久久久久久久| 欧美日韩一区二区三区不卡视频| 亚洲少妇诱惑| 亚洲调教视频在线观看| аⅴ资源天堂资源库在线| 国产乱码精品一区二区三区亚洲人| 日本欧美在线看| 日韩电影免费网站| 国产传媒av在线| 久久av国产紧身裤| 亚洲人成高清| 国产亚洲人成a在线v网站| 日韩和欧美的一区| 中文字幕亚洲影视| 天海翼亚洲一区二区三区| 亚洲精选成人| 视频一区日韩精品| 日本a级不卡| 先锋亚洲精品| 久色成人在线| 中文字幕av亚洲精品一部二部| 香蕉视频成人在线观看| 免费精品视频| 国产综合精品| 麻豆精品av| 欧美aⅴ一区二区三区视频| 视频一区日韩| 国产精品一线天粉嫩av| 人人香蕉久久| 欧美一区二区三区久久精品| 国产一区2区| 亚洲一级少妇| 亚洲一区欧美二区| 亚洲精品观看| 精品香蕉视频| 天堂网av成人| 日韩精品一区二区三区中文在线 | 日韩av首页| 在线亚洲观看| 国产精品chinese| 国产99久久| 欧美亚洲综合视频| 99精品视频精品精品视频| 一区二区三区四区在线观看国产日韩 | 亚洲天堂久久| 日韩高清不卡一区二区| 精品久久精品| 视频一区二区三区入口| 精品国产乱码久久久| 欧美在线网站| 国产亚洲一区| 久久久久久久久丰满| 欧美日韩在线精品一区二区三区激情综合 | 国产精品一区二区三区美女 | 日韩精品一区二区三区免费观影| 亚洲在线一区| 久久在线91| 亚洲深爱激情| а√天堂8资源在线| 婷婷成人av| 日韩久久精品网| 日韩一区二区三区高清在线观看| 在线中文字幕播放| 亚洲精品一级| 成人羞羞在线观看网站| 91嫩草精品| 久久久久久久久丰满| 久久国产三级| 久久午夜影视| 成人日韩在线观看| 国产欧美一区二区色老头| 午夜精品一区二区三区国产| 国产精品1区| 天堂久久av| 一级欧洲+日本+国产| 麻豆国产欧美一区二区三区| 亚洲毛片网站| 91久久午夜| 日韩中文欧美| 欧美国产精品| 欧美日韩调教| 免费日韩视频| 亚洲福利一区| 国产夫妻在线| 久久99高清| 欧美一区二区三区免费看| 视频一区欧美日韩| 亚洲精品一二三区区别| 深夜福利视频一区二区| 美日韩一区二区三区| 久久黄色影视| 日韩激情网站| 亚洲精品动态| 免播放器亚洲| 国产亚洲精品久久久久婷婷瑜伽| 国产精品13p| 国产欧美丝祙| 日韩激情av在线| 亚洲欧美一级| 蜜桃视频第一区免费观看| 蜜桃成人av| 久久九九国产| 日韩不卡免费高清视频| 国产一区二区精品福利地址| 国产精品地址| 国产精品videosex极品| 青草国产精品| 欧美午夜三级| 国产精品资源| 国产日韩一区二区三区在线| 日本aⅴ亚洲精品中文乱码| 美女91精品| 久久亚洲电影| 亚洲字幕久久| 中文字幕一区二区三区日韩精品| 综合激情一区| 亚州国产精品| 日本a级不卡| 国产免费av国片精品草莓男男| 日韩av中文字幕一区二区三区| 日韩精品中文字幕一区二区| 91麻豆精品激情在线观看最新| 欧美日本久久| 老牛国内精品亚洲成av人片| 麻豆久久一区| 日韩伦理一区| 久久精品1区| 一区二区三区四区在线看| 精品在线91| 亚洲伊人精品酒店| 97精品资源在线观看| 国产精品mm| 国产日韩电影| 欧美1区2区3区| 亚洲天堂日韩在线| 国产激情久久| 激情黄产视频在线免费观看| 国产综合欧美| 视频一区日韩精品| 九九久久国产| 亚洲欧美一区在线| 综合日韩在线| 国产精品日本一区二区不卡视频 | 在线视频免费在线观看一区二区| 欧美日韩国产高清| 蜜臀91精品一区二区三区| 99国产精品| 男人的天堂亚洲一区| 欧美亚洲三级| 捆绑调教美女网站视频一区| 樱桃视频成人在线观看| 99久久九九| 欧美特黄视频| 亚洲91网站| 国产精品nxnn| 亚洲午夜电影| 久久午夜精品| 美腿丝袜亚洲三区| 日韩黄色大片| 综合激情网...| 国产乱人伦精品一区| 日韩国产一区二区| 黄色成人在线网址| 亚州精品视频| 岛国av在线网站| 欧美~级网站不卡| 欧美日韩1区| 国产精品二区不卡| 欧美69视频| 日本不卡视频在线观看 | 欧美日韩1区2区3区| 香蕉成人av| 亚洲欧美日韩国产一区二区| 久久av网址| 欧美国产视频| 国产综合亚洲精品一区二| 日本欧美一区二区| 日韩成人精品一区二区| 一区二区91| 老司机精品视频在线播放| 伊人成人网在线看| 日本v片在线高清不卡在线观看| 国产一区二区三区四区五区传媒| 999久久久精品国产| 国产精品日本一区二区不卡视频| 色偷偷偷在线视频播放| 日韩国产在线观看| 日韩毛片网站| 欧美成人亚洲| 久久中文在线| 午夜在线精品偷拍| 黑人精品一区|