色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue keep alive原理

Vue的keep-alive是Vue內(nèi)置的一個(gè)組件,它的主要作用是緩存組件。在一個(gè)組件使用了keep-alive標(biāo)簽后,就已經(jīng)創(chuàng)建了該組件并掛載到DOM中,但是當(dāng)該組件被使用時(shí),它并不會(huì)銷(xiāo)毀,而是會(huì)被緩存起來(lái),以后再次使用時(shí)直接從緩存中獲取。

該功能的實(shí)現(xiàn)主要依賴(lài)于Vue的生命周期,每當(dāng)一個(gè)組件被創(chuàng)建時(shí),都會(huì)依次調(diào)用一系列Vue的生命周期函數(shù)。當(dāng)一個(gè)keep-alive標(biāo)簽內(nèi)部的組件被激活時(shí),即該組件在被渲染到DOM中時(shí),會(huì)依次調(diào)用activatedcreatedmountedupdated等一系列掛載函數(shù)。當(dāng)該組件被未激活時(shí),即該組件被緩存起來(lái)時(shí),會(huì)依次調(diào)用deactivated函數(shù)。

<template>
<div>
<!-- 使用keep-alive包裹需要緩存的組件 -->
<keep-alive>
<router-view></router-view>
</keep-alive>
</div>
</template>

在實(shí)現(xiàn)緩存功能時(shí),需要使用到Vue的components選項(xiàng)。當(dāng)一個(gè)組件被緩存后,在緩存中保存的是該組件對(duì)應(yīng)的Vue組件構(gòu)造函數(shù),而不是實(shí)際渲染出來(lái)的HTML元素。這些組件構(gòu)造函數(shù)是何時(shí)被緩存的呢?在該組件創(chuàng)建完畢之后,keep-alive會(huì)將其存儲(chǔ)到components選項(xiàng)中,當(dāng)然其中也包括了該組件的所有子組件。這樣保存構(gòu)造函數(shù)的好處在于,它們可以在組件被激活時(shí)直接用來(lái)創(chuàng)建組件。而不用重新通過(guò)模板編譯生成新的代碼。

對(duì)于被緩存的組件,當(dāng)該組件被重新使用時(shí),可以通過(guò)activated函數(shù)來(lái)進(jìn)行判斷。如果需要使用一些加載操作,可以在該函數(shù)中進(jìn)行,如在activate函數(shù)中通過(guò)ajax請(qǐng)求接口獲取數(shù)據(jù)并將其保存在組件的data中。

activated () {
if (!this.list.length) {
axios.get(apiUrl).then(res => {
this.list = res.data.list
})
}
}

當(dāng)一個(gè)組件被緩存起來(lái)后,其DOM元素和所有子組件已經(jīng)被移除,但是該組件的狀態(tài)仍然保留。這就意味著在一個(gè)被緩存的組件上進(jìn)行了一系列的操作后,再次重新使用時(shí),這些操作的結(jié)果都會(huì)被保留。例如,一個(gè)表格組件中有一個(gè)搜索功能,當(dāng)用戶(hù)在該表格中搜索后,即使緩存該組件,在重新使用時(shí),該搜索功能仍然處于保留狀態(tài)。

然而在緩存組件時(shí)也需要注意一些點(diǎn)。例如在多個(gè)keep-alive標(biāo)簽中,如果有多個(gè)相同的組件被緩存,Vue則會(huì)復(fù)用之前緩存中的該組件的狀態(tài)來(lái)渲染該組件。而如果該組件中有一些動(dòng)態(tài)狀態(tài),例如路由參數(shù)等,則需要重寫(xiě)key屬性來(lái)重新渲染該組件,并確保動(dòng)態(tài)狀態(tài)的正確性。同時(shí),使用keep-alive會(huì)增加內(nèi)存占用,因此需要根據(jù)實(shí)際需求謹(jǐn)慎使用。