<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
和其他框架一樣,Vue 有許多生命週期勾點,它們允許將程式碼附加到在建立或使用 Vue 應用程式時發生的特定事件,如當元件載入時、當元件被新增到 DOM 時或者當某些東西被刪除時。
Vue 有很多生命週期勾點,令人困惑的是每個勾點的含義或作用。在本指南中,將介紹每個生命週期掛鉤的作用以及如何使用它們。
Vue 在生命週期勾點方面有兩種正規化。一種是 Vue3 中引入的組合式API(Composition API),另一種是Vue2 中選項式API(Options API) ,它是定義 Vue 元件的原型模式。在本指南中,將從選項式API(Options API)開始,然後以此為基礎來展示組合式API(Composition API)中的工作原理。
選項式API(Options API)是 Vue2 的正規化,如下程式碼所示:
export default { name: "DevPoint", data() { return { phoneNumber: "13566666666", }; }, mounted() {}, };
要了解每個生命週期掛鉤何時觸發,下圖描述了每個生命週期掛鉤何時觸發。
要使用選項式API(Options API)執行任何生命週期掛鉤,可以將其新增到 Javascript 原型中。例如,如果使用 beforeCreate()
,在檢測到新元件後觸發的第一個勾點,可以像這樣新增它:
export default { name: "DevPoint", data() { return { someData: "20220609", }; }, mounted() {}, };
上面已經展示了不同勾點發生的時機,接下來介紹各個勾點各自做了什麼,具體什麼情況下觸發。
在元件初始化時呼叫,data()
和 computed
屬性此時不可用。它對於呼叫不操作元件資料的 API 非常有用。如果 data()
在這個勾點裡面更新,一旦選項式API(Options API)載入完,更新將會將會丟失,變得無效。
在範例處理完所有狀態操作後呼叫,可以存取響應式資料、computed
屬性、methods
和 watch
。$el
是 Vue 儲存元件 HTML 的變數,在這個勾點中還不可用,因為此時還沒有建立 DOM 元素。如果需要觸發 API 等不操作DOM元素的操作或者更新 data()
則可以在這裡進行。
這個勾點在渲染髮生之前會被執行。模板已編譯,因此它儲存在記憶體中,但尚未附加到頁面,尚未建立任何 DOM 元素,因此 $el
在這個階段仍然不可用。
元件已安裝並顯示在頁面上, $el
可被正常使用,在此階段可以從 Vue 存取和操作 DOM。這隻會在所有子元件完全安裝後觸發。當想在 DOM 載入後對其執行某些操作時,使用它很有用,比如可能更改其中的特定元素。
有時,會通過在watch
中更新資料或通過使用者互動來更改 Vue 元件中的資料。當更改 data()
或導致元件重新渲染時,將觸發更新事件。在DOM重新渲染髮生之前,beforeUpdate()
將立即觸發。在此事件之後,元件將重新渲染並使用最新資料進行更新。可以使用這個勾點來存取 DOM 的當前狀態,甚至可以更新 data()
。
觸發更新後,並且 DOM 已更新以最新資料重新渲染後,updated()
將觸發。這是在重新渲染後立即發生。現在,如果存取$el
DOM 內容或其他任何有關 DOM 內容的內容,它將顯示新的、重新渲染後的版本。如果有父元件,updated()
則首先呼叫子元件,然後呼叫父 updated()
掛鉤。
如果一個元件被移除,那麼它就會被解除安裝。在元件被完全移除之前,beforeUnmount()
觸發。此事件仍然可以存取 DOM 元素以及與元件有關的任何其他內容。這在刪除事件中很有用,例如,可以使用此事件通知伺服器使用者已刪除表中的節點。如果需要使用它們,仍然可以存取 this.$el
,以及 data()
、methods
和 watch
。
一旦完全刪除,unmount()
事件就會觸發。這可用於清理其他資料或事件偵聽器或定時器,以讓知道該元件不再存在於頁面上。如果需要使用它們,仍然可以存取存取 this.$el
,以及 data()
、methods
和 watch
。
如果習慣使用選項式API(Options API),上面的勾點會很有意義。如果主要使用 Vue 3,則需要習慣使用組合式API(Composition API)的風格。組合式API(Composition API)是 選項式API(Options API) 的補充,但使用勾點的方式略有不同。
在組合式API(Composition API)中,created()
和 beforeCreated()
不可存取。被替換為 setup()
,在 created()
和 beforeCreated()
實現的邏輯完全可以遷移到 setup()
中。
Hooks 可以與 setup()
一起使用,如下:
export default { name: "DevPoint", data() { return { someData: "20220609", }; }, setup() { console.log("setup"); }, mounted() { console.log(this.$el); }, };
但是,可能會看到這樣做的另一種方式是使用組合式 API 函數在 setup()
函數中定義掛鉤,如果需要這樣做,勾點的命名會略有不同:
beforeMount()
改為 onBeforeMount()
mounted()
改為 onMounted()
beforeUpdate()
改為 onBeforeUpdate()
updated()
改為 onUpdated()
beforeUnmount()
改為 onBeforeUnmount()
unmounted()
改為 onUnmounted()
這些函數的作用與前面介紹描述的完全相同,但呼叫方式略有不同。所有這些勾點都必須在 setup()
函數或設定指令碼中呼叫。例如,必須在 setup
函數中執行勾點,如下所示:
export default { setup() { // 所有勾點的邏輯程式碼在這裡 }, };
或者如下:
<script setup> // 所有勾點的邏輯程式碼在這裡 </script>
因此,如果想使用這種方法呼叫勾點,大概程式碼如下:
<script> export default { setup() { // 所有勾點邏輯 onBeforeMount(() => { // beforeMount() 邏輯 }); onBeforeUpdate(() => { // beforeUpdate() 邏輯 }); }, }; </script>
Vue 生命週期相當複雜,但它為前端開發提供了很多工具來執行程式碼、更新資料並確保元件以想要的方式顯示。
到此這篇關於Vue生命週期勾點的文章就介紹到這了,更多相關Vue生命週期勾點內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45