Vue2中父子組件,如果有Keep-alive,生命周期執(zhí)行順序有什么變化
1. vue2中父子組件,如果有keep-alive,生命周期執(zhí)行順序有什么變化
在 Vue 2 中,如果你使用了 keep-alive 來(lái)包裹子組件,生命周期鉤子的執(zhí)行順序會(huì)有所改變。
keep-alive 組件提供了一個(gè)抽象層來(lái)緩存子組件,使得當(dāng)子組件被切換出去再切回來(lái)時(shí),它的狀態(tài)能夠被保留下來(lái),而不是重新創(chuàng)建和掛載。
1.1. 不使用 keep-alive 的生命周期順序
- 父組件 beforeCreate
- 父組件 created
- 父組件 beforeMount
- 子組件 beforeCreate
- 子組件 created
- 子組件 beforeMount
- 子組件 mounted
- 父組件 mounted
1.2. 使用 keep-alive 的生命周期順序
當(dāng)使用 keep-alive 纏繞在子組件外面時(shí),情況會(huì)有所不同。keep-alive 是 Vue 提供的一個(gè)抽象組件,它可以緩存不活動(dòng)的組件實(shí)例而不是銷毀它們。這意味著當(dāng)切換到其他組件時(shí),這些組件的狀態(tài)會(huì)被保存下來(lái),而不會(huì)重新初始化。
1.2.1. 初次進(jìn)入緩存區(qū)域
初次進(jìn)入時(shí),與不使用 keep-alive 相似,因?yàn)樾枰獎(jiǎng)?chuàng)建并掛載組件。但是,在激活或停用組件時(shí),會(huì)有額外的鉤子被調(diào)用。
- 父組件 beforeCreate
- 父組件 created
- 父組件 beforeMount
- 子組件 beforeCreate
- 子組件 created
- 子組件 beforeMount
- 子組件 mounted
- 父組件 mounted
- 子組件 activated (如果使用了 keep-alive)
1.2.2. 切換離開(kāi)緩存區(qū)域
當(dāng)從一個(gè)被 keep-alive 纏繞的組件切換到另一個(gè)組件時(shí):
- 子組件 deactivated (離開(kāi)緩存區(qū)域前觸發(fā))
- 新組件 beforeCreate...mounted (新組件的生命周期鉤子按照正常的順序觸發(fā))
1.2.3. 再次進(jìn)入緩存區(qū)域
當(dāng)再次回到之前被 keep-alive 纏繞的組件時(shí):
子組件 activated (回到緩存區(qū)域后觸發(fā))
注意,由于 keep-alive 的緩存機(jī)制,當(dāng)再次激活被緩存的組件時(shí),不會(huì)重新觸發(fā) beforeCreate、created、beforeMount 和 mounted 鉤子,而是直接觸發(fā) activated 鉤子。
1.3. 總結(jié)
- 首次加載:keep-alive 對(duì)于組件的首次加載沒(méi)有影響,所有生命周期鉤子都會(huì)按正常順序觸發(fā)。
- 切換離開(kāi):當(dāng)組件被切換出去時(shí),會(huì)觸發(fā) deactivated 鉤子。
- 再次進(jìn)入:當(dāng)組件再次被激活時(shí),會(huì)觸發(fā) activated 鉤子,而不是重新初始化。
activated 和 deactivated 是 keep-alive 特有的生命周期鉤子,它們用于處理組件被激活或停用時(shí)的行為。這些鉤子可以用來(lái)執(zhí)行一些操作,例如數(shù)據(jù)刷新或資源釋放等。
請(qǐng)確保在 Vue 項(xiàng)目的開(kāi)發(fā)過(guò)程中,根據(jù)官方文檔來(lái)了解最新的生命周期鉤子和 keep-alive 的行為。