Vue組件中的定時器銷毀問題

方法一:

在data函數(shù)中定義定時器名稱:

data(){
    return {
        timer: null // 定時器名稱
    }
}

然后這樣使用定時器:

this.timer = (()=>{
    // To do something
}, 1000)

最后在beforeDestroy()生命周期內(nèi)清除定時器:

beforeDestroy() {
    clearInterval(this.timer);        
    this.timer = null;
}

方案1有兩點不好的地方,引用尤大的話來說就是:

  • 它需要在這個組件實例中保存這個 timer,如果可以的話最好只有生命周期鉤子可以訪問到它。這并不算嚴重的問題,但是它可以被視為雜物。
  • 我們的建立代碼獨立于我們的清理代碼,這使得我們比較難于程序化的清理我們建立的所有東西。

方法二

該方法是通過$once這個事件偵聽器器在定義完定時器之后的位置來清除定時器。以下是完整代碼:

const timer = setInterval(() =>{            
    // 某些定時器操作                
}, 500);            
// 通過$once來監(jiān)聽定時器,在beforeDestroy鉤子可以被清除。
this.$once('hook:beforeDestroy', () => {    
    clearInterval(timer);                      
})
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,621評論 1 32
  • 最近要求使用vue進行前后端分離開發(fā)微信公眾號,不斷摸索踩坑之后,總結(jié)出如下幾點vue項目開發(fā)中常見的問題及解決辦...
    1263536889閱讀 865評論 0 15
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,306評論 6 13
  • 今天下午在最后一節(jié)體育課,體育老師給我們測100米500米男子,100米500米女子,男子100米我第一名,...
    倔犟的張博聞閱讀 186評論 0 2
  • 在此之下她就顯得無話題 或者在別人看來是無聊,因為剛?cè)肷鐣乃侨裏o青年,沒錢沒能力沒經(jīng)驗,還沒到需要討論這個的時...
    在美景中發(fā)呆閱讀 213評論 0 0

友情鏈接更多精彩內(nèi)容