v-keep-alive是Vue的內(nèi)置組件,用于在Vue中緩存動(dòng)態(tài)組件,以便在組件之間切換時(shí)保留它們的狀態(tài)。這個(gè)組件可以讓我們通過給組件添加一個(gè)名字(name)來緩存這個(gè)組件的狀態(tài)。緩存的方式是將組件以DOM的方式保存到內(nèi)存中,等下次需要使用時(shí),直接從內(nèi)存中讀取即可。
使用v-keep-alive的原理是Vue的生命周期鉤子函數(shù)。具體來說,當(dāng)某個(gè)組件被keep-alive 包裹時(shí),這個(gè)組件的兩個(gè)鉤子函數(shù)activated和deactivated將會(huì)被調(diào)用。
/*在被包裹的組件中,activated() 鉤子函數(shù)將會(huì)在組件被激活(keep-alive 組件激活)時(shí)調(diào)用*/
export default {
activated() {
console.log('activated')
}
}
/*deactivated() 鉤子函數(shù)將會(huì)在組件失活 (keep-alive 組件停用) 時(shí)調(diào)用*/
export default {
deactivated() {
console.log('deactivated')
}
}
在組件被激活時(shí),會(huì)有一個(gè)緩存標(biāo)識(shí)(cache)被設(shè)置,同時(shí)activated鉤子函數(shù)會(huì)被調(diào)用,這個(gè)緩存標(biāo)識(shí)在組件失活時(shí)依然會(huì)存在,同時(shí)deactivated鉤子函數(shù)會(huì)被調(diào)用。當(dāng)這個(gè)組件再次被激活時(shí),由于緩存標(biāo)識(shí)存在,直接從內(nèi)存中讀取組件的DOM節(jié)點(diǎn),從而實(shí)現(xiàn)組件的緩存。