uniapp組件生命周期詳解:從加載到銷毀完全掌握

一、組件生命周期概述

組件生命周期指的是,一個組件從創建到銷毀整個過程所經歷的各個階段。Vue.js 框架、React 框架和uniapp框架都有生命周期。掌握組件生命周期是理解組件工作原理的關鍵。組件的生命周期可以分為四個階段:創建、掛載、更新和銷毀,每個階段都有對應的生命周期函數,可以在特定階段進行特定的操作。

<script>
export default {
  name: 'myComponent',
  created() {
    console.log('組件創建')
  },
  mounted() {
    console.log('組件掛載')
  },
  updated() {
    console.log('組件更新')
  },
  destroyed() {
    console.log('組件銷毀')
  }
}
</script>

在上面的代碼中,我們定義了一個組件名為「myComponent」,並實現了該組件的四個生命周期函數,分別是創建階段的created、掛載階段的mounted、更新階段的updated和銷毀階段的destroyed。每個生命周期鉤子都有相應的方法,可以在特定的階段做出響應。

二、uni-app組件生命周期鉤子函數

1. 創建階段

在組件創建階段,會依次調用以下函數:

  • beforeCreate:該函數在實例創建之前調用,此時實例的屬性和方法均未初始化。這個階段實例和元素都不存在。
  • created:該函數在實例創建之後調用,此時實例的屬性和方法已經被創建、但是元素還沒有被渲染。這個階段實例已經存在,但是 DOM 元素還沒有,也就是你通過 this 或是 $el 還無法看到 html 結構。
<template>
  <div>{{message}}</div>
</template>
<script>
export default {
  beforeCreate() {
    console.log("組件尚未創建")
  },
  created() {
    console.log("組件已創建")
  },
  data() {
    return {
      message: 'Hello World!'
    }
  }
}
</script>

在上面這個例子中,我們定義了組件的模板和腳本。在beforeCreate函數中打印出”組件尚未創建”,在created函數中打印出”組件已創建”。因此,在beforeCreate函數中,組件和實例甚至此時都尚未創建,所以無法訪問變量和方法。

2. 掛載階段

在組件掛載階段,會依次調用以下函數:

  • beforeMount: 此函數在掛載開始之前被調用,並且所有的 render 函數和渲染的子組件已被首次調用或被更新。這個階段可以訪問到運行時生成的虛擬 DOM樹。但是,這時的結構還沒有被渲染成真正的 DOM 結構。
  • mounted: 此函數在掛載完成後被調用,這時 DOM 元素已經掛載並渲染完畢。因此,在這個函數中可以訪問到 DOM 元素,也可以進行一些 DOM 操作。
<template>
  <div ref="box"></div>
</template>
<script>
export default {
  mounted() {
    console.log(this.$refs.box instanceof HTMLElement) // true
    this.$refs.box.style.width = "100px"
  }
}
</script>

在上面的代碼中,我們定義了一個空的<div>元素,並通過 $refs 獲取到 DOM 節點。在 mounted 函數中,我們利用 $refs.box 修改了該元素的 width 屬性。

3. 更新階段

在組件更新階段,會依次調用以下函數:

  • beforeUpdate: 此時組件數據已經完成更新,但是 DOM 尚未更新,因此在此階段中可以進行更新前的數據操作。
  • updated: 在此時組件的數據和渲染的 DOM 結構都已經完成了更新。
<template>
  <button @click="counter++">{{ counter }}</button>
</template>
<script>
export default {
  data() {
    return { counter: 0 }
  },
  updated() {
    console.log('更新後的計數器值為:' + this.counter)
  }
}
</script>

在上面的代碼中,我們定義了一個計數器按鈕,每次點擊都會讓計數器的值加1.在 updated 函數中,即可得到更新後的計數器值。

4. 銷毀階段

在組件銷毀階段,會依次調用以下函數:

  • beforeDestroy: 此時組件即將被銷毀,但是 DOM 結構仍然存在。
  • destroyed: 此時組件已經被銷毀,並且 DOM 結構也不存在了。
<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  data() {
    return { message: 'Hello World!' }
  },
  destroyed() {
    console.log('組件已被銷毀')
  }
}
</script>

在上面的代碼中,我們定義了一個顯示”Hello World!”的 <div> 元素。在 destroyed 函數中打印出組件已被銷毀的信息。

三、uni-app組件生命周期實例

1. 創建階段

<template>
  <div>組件創建階段</div>
</template>
<script>
export default {
  beforeCreate() {
    console.log('組件即將創建')
  },
  created() {
    console.log('組件已經創建')
  }
}
</script>

2. 掛載階段

<template>
  <div>組件掛載階段</div>
</template>
<script>
export default {
  beforeMount() {
    console.log('組件即將掛載')
  },
  mounted() {
    console.log('組件已經掛載')
  }
}
</script>

3. 更新階段

<template>
  <button @click="counter++">{{ counter }}</button>
</template>
<script>
export default {
  data() {
    return { counter: 0 }
  },
  beforeUpdate() {
    console.log("即將更新計數器")
  },
  updated() {
    console.log("計數器已經更新")
  }
}
</script>

4. 銷毀階段

<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  data() {
    return { message: 'Hello World!' }
  },
  beforeDestroy() {
    console.log('組件即將被銷毀')
  },
  destroyed() {
    console.log('組件已經被銷毀')
  }
}
</script>

總結

本文通過詳細講解uni-app組件的生命周期,從創建到銷毀完全掌握了組件的整個生命周期。組件的鉤子函數能夠讓我們在組件的生命周期中進行一些操作,比如在created函數中初始化數據,在mounted函數中訪問DOM元素等。掌握uni-app組件的生命周期,有助於我們更好地理解組件的工作原理,並能夠更好地應用uni-app框架進行開發。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197223.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 13:29
下一篇 2024-12-03 13:29

相關推薦

  • QML 動態加載實踐

    探討 QML 框架下動態加載實現的方法和技巧。 一、實現動態加載的方法 QML 支持從 JavaScript 中動態指定需要加載的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • 如何修改ant組件的動效為中心

    當我們使用Ant Design時,其默認的組件動效可能不一定符合我們的需求,這時我們需要修改Ant Design組件動效,使其更加符合我們的UI設計。本文將從多個方面詳細闡述如何修…

    編程 2025-04-29
  • Ant Design組件的動效

    Ant Design是一個基於React技術棧的UI組件庫,其中動效是該組件庫中的一個重要特性之一。動效的使用可以讓用戶更清晰、更直觀地了解到UI交互的狀態變化,從而提高用戶的滿意…

    編程 2025-04-29
  • 類加載的過程中,準備的工作

    類加載是Java中非常重要和複雜的一個過程。在類加載的過程中,準備階段是其中一個非常重要的步驟。準備階段是在類加載的連接階段中的一個子階段,它的主要任務是為類的靜態變量分配內存,並…

    編程 2025-04-28
  • Lazarus LoadLibrary:DLL動態鏈接庫的加載和使用

    本文將從以下幾個方面介紹Lazarus中LoadLibrary和FreeLibrary函數的使用方法: 一、簡介 LoadLibrary和FreeLibrary是Windows動態…

    編程 2025-04-27
  • Spring Boot本地類和Jar包類加載順序深度剖析

    本文將從多個方面對Spring Boot本地類和Jar包類加載順序做詳細的闡述,並給出相應的代碼示例。 一、類加載機制概述 在介紹Spring Boot本地類和Jar包類加載順序之…

    編程 2025-04-27
  • 用mdjs打造高效可復用的Web組件

    本文介紹了一個全能的編程開發工程師如何使用mdjs來打造高效可復用的Web組件。我們將會從多個方面對mdjs做詳細的闡述,讓您輕鬆學習並掌握mdjs的使用。 一、mdjs簡介 md…

    編程 2025-04-27
  • Spring MVC主要組件

    Spring MVC是一個基於Java語言的Web框架,是Spring Framework的一部分。它提供了用於構建Web應用程序的基本架構,通過與其他Spring框架組件集成,使…

    編程 2025-04-27
  • 用Python加載鳶尾花數據

    本文將詳細介紹如何使用Python加載鳶尾花數據,包括數據源的介紹、數據的獲取和清洗、數據可視化等方面。 一、數據源的介紹 鳶尾花數據集(Iris dataset)是常用的分類實驗…

    編程 2025-04-27

發表回復

登錄後才能評論