2020-09-01 Vue 組件生命周期

組件生命周期

一個組件 從創(chuàng)建 到 到最后銷毀的整個過程

生命周期圖示

  • 四大階段
    1. 初始化
      • beforeCreate() 不常用 無法調用data以及調用methods
      • created() 已經初始化完成埃元,完成對于 data數(shù)據(jù)的監(jiān)聽勘天,在這里可以操作data和methods缸濒。 使用場景:一般在這里 調用 組件 初始化 數(shù)據(jù)的請求函數(shù)
    1. 編譯階段妇拯,視圖渲染掛載
      • beforeMount() 沒啥用
      • mounted() 在這里可以獲取 當前組件的 生成dom。比如:各種 庫(渲染元素脓钾、swiper售睹、better-scroll、ehcarts可训、富文本編輯器...)
    1. 數(shù)據(jù)更新昌妹,視圖刷新
      • beforeUpdate()
      • updated() 獲取更新后的dom
    1. 銷毀,卸載
      • beforeDestroy() 在這里 應該清除 全局事件綁定握截,以及 定時器
      • destroyed() 實例已經銷毀
組件飞崖、實例生命周期 是指一個組件從創(chuàng)建到銷毀的整個過程,vue提供了 不同時期的生命周期的鉤子函數(shù)川蒙,來監(jiān)控不同的生命周期過程蚜厉,在這些鉤子函數(shù)中,可以做不同的操作
beforeCreate 實例初始化之前
created 實例已經初始化  在這里可以使用data和methods的方法了畜眨,一般在這個生命周期內,調用獲取數(shù)據(jù)的ajax函數(shù)
beforeMount 視圖渲染之前
mounted 視圖已經渲染术瓮,在這里獲取獲取渲染后dom康聂,可以做一些 特效(綁定一些全局的事件..)
beforeUpdate 數(shù)據(jù)更新 視圖重新渲染之前
updated 數(shù)據(jù)更新 視圖 渲染之后 在這里可以獲取 更新后最新的dom
activated  組件激活
deactivated 組件 停止使用
beforeDestroy  實例銷毀之前  在這里可以清楚定時器 銷毀 全局事件如滾動
destroyed 實例銷毀之后
errorCaptured  捕獲錯誤鉤子

注意:
activated
deactivated
當一個組件 通過 keepalive組件緩存 之后,所有的生命周期都不會重新調用胞四,原因組件被緩存了沒有真正的銷毀恬汁。
activated 組件再一次使用時,會調用 讓緩存的組件 局部刷新(調用局部刷新 數(shù)據(jù)的 請求函數(shù))
deactivated 組件 停止使用時會調用 (清除定時器 銷毀全局的事件)

組件生命周期鉤子函數(shù)

<body>
  <div id="app">
    <button @click="isShow = !isShow">{{ isShow?"隱藏":'顯示' }}</button>
    <home v-if="isShow"></home>
  </div>
  <template id="home">
    <div>
      <h3>Home</h3>
      <button @click="add">add</button>
      <ul ref="oul">
        <li v-for="item in arr" :key="item">
          {{ item }}
        </li>
      </ul>
    </div>
  </template>
</body>
<script src="./js/vue.js"></script>
<script>

  //定義一個子組件
  let Home = {
    template:'#home',
    data(){
      return {
        arr:[1,2,3,4,5],
        timer:null
      }
    },
    methods:{
      add(){
        this.arr.push(this.arr.length+1);
      }
    },
    //鉤子函數(shù)
    beforeCreate(){
      //初始化之前
      console.log('初始化之前');
    },
    created(){
      //初始化已經完成辜伟,這里可以調用data以及methods的方法
      console.log('初始化已經完成');
    },
    beforeMount(){
      //編譯之前
      console.log('編譯之前');
    },
    mounted(){
      //編譯完成氓侧,可以獲取dom當前組件  例如各種庫(swiper,ehcarts等)
      console.log('編譯完成');

      //定義一些全局的函數(shù)
      window.onscroll = function(){
        console.log('滾動事件觸發(fā)');
      },

      this.timer = setInterval(()=>{
        console.log('定時器觸發(fā)了');
      },1000)
    },

    beforeUpdata(){
      //數(shù)據(jù)更新了导狡,視圖刷新之前
      console.log('數(shù)據(jù)更新了约巷,視圖刷新之前');
    },
    updated(){
      //數(shù)據(jù)更新,試圖已經刷新完成
      console.log('數(shù)據(jù)更新旱捧,試圖已經刷新完成');
    },
    beforeDestroy(){
      //銷毀之前執(zhí)行独郎,可以在組件銷毀的同時清除定時器或者銷毀全局事件等
      console.log('銷毀之前執(zhí)行');

      //清除銷毀一些全局的事件
      window.onscroll = null;
      clearInterval(this.timer);
    },
    destroyed(){
      //銷毀完成
      console.log('銷毀完成');
    }
  }

  // 注冊成全局組件
  Vue.component('Home',Home)

  let vm = new Vue({
    el:'#app',
    data:{
      isShow:true
    },
  })
</script>

keep-alive

  • 包裹其他組件,緩存其他組件,不會被銷毀枚赡,只存在激活和停用
    1. activated()
      被keep-alive組件包裹的組件氓癌,在 激活時觸發(fā)
    1. deactivated()
      被keep-alive組件包裹的組件,在 停用時時觸發(fā)
<body>
  <div id="app">
    <button @click="isShow = !isShow">{{ isShow?'隱藏':'顯示' }}</button>
    <keep-alive>
      <home v-if="isShow"></home>
    </keep-alive>
  </div>
</body>
<script src="./js/vue.js"></script>
<script>
  let Home = {
    template:`
      <div>
        <h4>home頁</h4>  
          <input v-model="msg"/>
        </ul>
      </div>
    `,
    data(){
      return {
        msg:''
      }
    },
    methods:{
      fetchData(){
        console.log("數(shù)據(jù)過來了")
      }
    },
    beforeCreate(){
      console.log("初始化之前")
    },
    activated(){
      console.log("我再一次激活了");
      this.fetchData();
    },
    deactivated(){
      console.log('我被停用了');
      //  定時定時器和全局的事件 
    },
    created(){
      this.fetchData();
      console.log("初始化已經完成贫橙,在這里可以調用data了可以調用methods中的方法了")
    },
    beforeMount(){
      console.log("編譯之前")
    },
    mounted(){
      console.log("編譯已經完成了贪婉,在這里可以獲取dom");

    },
    beforeUpdate(){
      console.log('數(shù)據(jù)更新了,視圖刷新之前');
      
    },
    updated(){
      console.log("數(shù)據(jù)更新卢肃,視圖已經刷新完成了");
    
    },
    beforeDestroy(){
      console.log("銷毀之前");
    },
    destroyed(){
      console.log("組件已經銷毀")
    }
  }

  Vue.component('Home',Home)
  let vm = new Vue({
    el:"#app",
    data:{
      isShow:true
    }
  })
</script>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末疲迂,一起剝皮案震驚了整個濱河市才顿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鬼譬,老刑警劉巖娜膘,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異优质,居然都是意外死亡竣贪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門巩螃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來演怎,“玉大人,你說我怎么就攤上這事避乏∫” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵拍皮,是天一觀的道長歹叮。 經常有香客問我,道長铆帽,這世上最難降的妖魔是什么咆耿? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮爹橱,結果婚禮上萨螺,老公的妹妹穿的比我還像新娘。我一直安慰自己愧驱,他們只是感情好慰技,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著组砚,像睡著了一般吻商。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惫确,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天手报,我揣著相機與錄音,去河邊找鬼改化。 笑死掩蛤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的陈肛。 我是一名探鬼主播揍鸟,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阳藻?” 一聲冷哼從身側響起晰奖,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腥泥,沒想到半個月后匾南,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蛔外,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年蛆楞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夹厌。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡豹爹,死狀恐怖,靈堂內的尸體忽然破棺而出矛纹,到底是詐尸還是另有隱情臂聋,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布或南,位于F島的核電站孩等,受9級特大地震影響,放射性物質發(fā)生泄漏采够。R本人自食惡果不足惜瞎访,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吁恍。 院中可真熱鬧,春花似錦播演、人聲如沸冀瓦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽感局。三九已至暂衡,卻和暖如春狂巢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藻雌。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工胯杭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸽心。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓再悼,卻偏偏與公主長得像膝但,于是被迫代替她去往敵國和親冲九。 傳聞我的和親對象是個殘疾皇子莺奸,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359