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

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

vue 實現setInterval 創建和銷毀實例

瀏覽:154日期: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久久,三上悠亚国产精品一区二区三区
精品国产乱码久久久久久樱花| 免费观看在线综合色| 亚洲激精日韩激精欧美精品| 日韩欧美精品综合| 欧美天堂一区| 久久超级碰碰| 国产精品一区二区三区四区在线观看| 综合欧美精品| 国产一区二区三区不卡视频网站 | 日韩欧美少妇| 日韩电影免费网站| 日韩中文字幕无砖| 亚洲欧洲美洲国产香蕉| 国产伊人久久| 中文av在线全新| 日韩在线一二三区| 国产日韩欧美一区二区三区 | 中文在线中文资源| 国产精品久久久久久久久妇女| 激情综合婷婷| 91欧美日韩| 亚洲精品日本| 精品网站999| 亚洲尤物av| 日本不卡视频在线| 国产精品第十页| 精品免费av在线| 99国产一区| 欧美日韩免费观看视频| 日韩高清中文字幕一区| 精品久久97| 久久高清免费| 久久99国产精品视频| 99精品电影| 日韩高清不卡在线| 精品日韩毛片| 日韩在线看片| 欧美黑人巨大videos精品| 亚洲一级二级| 日韩电影免费网站| 国产麻豆综合| 三上悠亚国产精品一区二区三区| 蜜桃av一区二区三区电影| 亚洲色图国产| 日韩影片在线观看| 精品丝袜久久| sm久久捆绑调教精品一区| 激情欧美一区| 日韩av资源网| 欧美不卡高清一区二区三区| 水蜜桃久久夜色精品一区的特点| 欧美一区精品| 日本不卡的三区四区五区| 久久国产电影| 青草久久视频| 欧美日韩在线二区| 久久一区精品| 国产精品久久久久久av公交车| 免费观看久久av| 蜜臀久久精品| 日韩欧美一区二区三区在线观看 | 日韩久久精品| 人人草在线视频| 精品一区视频| 国产精品99久久精品| 国产精品久久久久蜜臀| 麻豆免费精品视频| 久久99国产精品视频| 国产探花一区二区| 日韩免费精品| 日韩电影在线视频| 国产日本亚洲| 久久青草久久| 视频一区二区三区入口| 今天的高清视频免费播放成人| 日韩一区欧美| 精品久久国产一区| 99在线精品免费视频九九视| 国产精品色婷婷在线观看| 日韩亚洲国产欧美| 国内在线观看一区二区三区 | 国产色99精品9i| 欧美日韩国产在线一区| 久久国产精品色av免费看| 亚洲精品一二三**| 卡一卡二国产精品| 久久精品一区二区不卡| 视频在线观看91| 精品视频一二| 91亚洲国产高清| 99香蕉国产精品偷在线观看| 欧美在线不卡| 免费av一区| 精品视频一区二区三区在线观看| 999国产精品视频| 国产日韩欧美一区二区三区在线观看| 免费一级欧美片在线观看网站| 99成人超碰| 国产欧美成人| 石原莉奈在线亚洲二区| 欧美中文字幕一区二区| 日韩av一二三| 久久夜色精品| 欧美视频久久| 正在播放日韩精品| 国产精品亚洲综合色区韩国| 国产乱码精品一区二区三区四区| 欧美另类中文字幕 | 欧美激情在线精品一区二区三区| 日韩av电影一区| 在线亚洲一区| 久久国产中文字幕| 免费在线小视频| 麻豆久久一区| 97精品资源在线观看| 日韩激情一二三区| 亚洲一二av| 亚洲美女91| 久久国产欧美日韩精品| 久久一二三区| 视频一区免费在线观看| 欧美亚洲国产激情| 欧美日韩视频网站| 日韩理论片av| 欧美片网站免费| 日本精品在线播放| 日韩久久一区| 天堂成人国产精品一区| 亚洲欧美网站| 欧美亚洲一级| 亚洲天堂免费电影| 99riav1国产精品视频| 蜜臀久久99精品久久久久久9| 亚洲二区精品| 亚洲性图久久| 中文字幕中文字幕精品| 国产丝袜一区| 久久精品国产在热久久| 亚洲激精日韩激精欧美精品| 免费在线观看一区| 精品一区av| 国产91久久精品一区二区| 国产va免费精品观看精品视频| 亚洲大片在线| 最新亚洲国产| 福利一区二区三区视频在线观看| 青青在线精品| 日韩欧美中文字幕一区二区三区 | 婷婷成人在线| 一区免费视频| 免播放器亚洲一区| 亚洲精品在线二区| 国产私拍福利精品视频二区| 精品高清久久| 尤物在线精品| 日本午夜精品一区二区三区电影| 爽好久久久欧美精品| 精品一区二区三区的国产在线观看 | 亚洲国产成人精品女人| 久久福利毛片| 欧美日韩视频免费看| 视频小说一区二区| 日韩精品中文字幕一区二区| 91免费精品| 日韩精品欧美成人高清一区二区| 国产成人免费精品| 日韩精品一卡二卡三卡四卡无卡| 精品视频在线一区二区在线| 欧美日韩一区自拍| 日韩视频一区二区三区在线播放免费观看| 蜜桃av一区二区三区电影| 石原莉奈在线亚洲二区| 久久亚洲欧洲| 四虎精品一区二区免费| 美女久久99| 黄色成人精品网站| 国产中文字幕一区二区三区| 日韩欧美一区二区三区免费看| 精品久久久网| 久久国产日本精品| 精品一区三区| 日本va欧美va瓶| 电影91久久久| 国产亚洲在线观看| 国产精品麻豆成人av电影艾秋 | 久久精品国产福利| 欧美一区=区三区| 日韩欧美中文字幕在线视频| 99riav国产精品| 日韩激情一区二区| 免费在线观看视频一区| 欧美日韩激情在线一区二区三区| 精品国产三区在线| 精品国产乱码久久久久久樱花| 国产精品chinese| 欧美亚洲国产日韩| 亚洲欧洲日韩| 牛牛精品成人免费视频| 老色鬼精品视频在线观看播放| 国产精品日韩精品中文字幕|