Vue.js 从零开始:生命周期

生命周期介绍

在一开始建立Vue的实体,然後挂载到#app就算是已经在使用元件,而这一连串的建立到被销毁,都有他的生命周期

https://ithelp.ithome.com.tw/upload/images/20210928/20118347XTVtfeJjXG.png

Vue本身就是以很多元件所组成的概念,举例来说最外层是一个app元件,里面有BannerFooterMain的子元件,当我在首页切换页面时,需要切换Main子元件内容,就必须卸载、重新生成,这个过程就会触发生命周期。


Vue 生命周期图

https://ithelp.ithome.com.tw/upload/images/20211101/20118347ItZwzez3Iu.png

周期图分为三阶段:

  • 实体建立阶段
    beforeCreate:Vue实体建立,状态事件还没初始化。
    created:资料建立完成。
    beforeMount:HTML结构准备与DOM节点绑定,尚未挂载。
    mounted:已经将DOM元素挂载到画面上。

  • 实体更新阶段
    beforeUpdate:当资料有更动,画面更新前。
    Update:当资料有更动,画面更新完成。

  • 销毁阶段
    beforeUnmount:Vue实体被销毁前。
    unmounted:Vue实体被销毁完成。


展示生命周期

<div id="app">
    <button @click="isShowing = !isShowing">
        <span v-if="isShowing">隐藏元件</span>
        <span v-else>显示元件</span>
    </button>
    <hr>
    <lifecycle v-if="isShowing"></lifecycle>   
</div>
const app = Vue.createApp({
    data() {
        return {
        isShowing: false
        }
    }
});
app.component('lifecycle', {
  template: `<div>
    <h4>{{ state }}</h4>
    <input type="text" class="form-control" v-model="state">
  </div>`,
  data() {
    return {
      state: 'Vue data 资料状态'
    }
  },
  beforeCreate() {
    console.log(`beforeCreate! ${this.state}`);
  },
  created() {
    console.log(`created! ${this.state}`);
    alert(`created! ${this.state}`);
  },
  beforeMount() {
    alert(`beforeMount! ${this.state}`);
  },
  mounted() {
    alert(`mounted! ${this.state}`);
  },
  beforeUpdate() {
    console.log(`beforeUpdate! ${this.state}`);
  },
  updated () {
    console.log(`updated! ${this.state}`);
  },
  beforeUnmount() {
    console.log(`beforeUnmount! ${this.state}`);
  },
  unmounted() {
    console.log(`unmounted! ${this.state}`);
  }
});
app.mount('#app');

这边使用v-if来做示范,画面一开始时HTML还未生成:
https://ithelp.ithome.com.tw/upload/images/20210929/20118347AUgG0UssBJ.png

点击显示元件开始生命周期:
https://ithelp.ithome.com.tw/upload/images/20210929/201183470xIeLwllEg.png
beforeCreate之前还未能取得Data资料,created阶段已经能看到data里面的资料"Vue data 资料状态"

点击确认後,来到mounted阶段,DOM元素准备要挂载到HTML:
https://ithelp.ithome.com.tw/upload/images/20210929/20118347ooDpQZJqX5.png

再次点击确认,HTML已经挂载完毕:
https://ithelp.ithome.com.tw/upload/images/20210929/20118347cOeYRCUIUE.png

此时我们在更改input里面的文字,更动data里的state的值,此阶段为beforeUpdateUpdate的生命周期:
https://ithelp.ithome.com.tw/upload/images/20210929/20118347vION8Azd7Q.png

最後销毁阶段beforeUnmountunmounted,点击隐藏元件,销毁v-if:
https://ithelp.ithome.com.tw/upload/images/20210929/201183471G9LW7iAMZ.png

codepen 完整程序码

以上这些看完应该是头昏眼花,刚开始学习如果有要操作DOM的元素,建议使用mounted,如果使用created会产生一些问题。

如有错误,欢迎指教。

/images/emoticon/emoticon22.gif


六角学院
重新认识 Vue.js
Vue.js


<<:  [DAY17] 介绍 Azure Machine Learning SDK

>>:  [Day 20] 机器学习金手指 - Auto-sklearn

视觉设计(4)

渐层背景 背景(background)除了可以用图片、单色填满之外,也可以设定为渐层。其属性值为li...

DAY25 - 展现成果,建立成果页面

随着专案前端、後端等等各个架构与部署都准备完成,Side project 就差最後一步骤,将自己或别...

[Day06] Tableau 轻松学 - Tableau Desktop 安装

前言 Tableau Desktop 版本更新非常快速,平均一季会推出一个新版本,每个版本之间在介面...

【19】使用 Pooling 和 Conv 来把图片变小 (subsampling) 的比较实验

Colab连结 早期刚学深度学习时,我们 AlexNet 学到了几个基本的 CNN, Dense, ...

Day 30:吸收、创意、思考

前言 工程师听起来就像工具人一样,每天都有追不完的技术,赶不完的专案,但如果我们不保持好奇心跟创意,...