清除Vue組件緩存 在開發(fā)過程中,當(dāng)使用Vue的時(shí)候,我們常常會(huì)遇到一個(gè)問題,就是組件緩存的問題。Vue在render的時(shí)候,會(huì)對(duì)組件進(jìn)行緩存,如果一個(gè)組件被緩存了,那么當(dāng)它在不同的地方被復(fù)用的時(shí)候,Vue就不會(huì)再次實(shí)例化它,而是直接復(fù)用之前緩存的那個(gè)實(shí)例。這一特性顯著提高了Vue的性能,但是有的時(shí)候我們需要清除組件的緩存。
什么是組件緩存?當(dāng)我們使用keep-alive標(biāo)簽包裹一個(gè)組件時(shí),該組件會(huì)被緩存。當(dāng)導(dǎo)航到其他路由時(shí),Vue會(huì)將該組件保存在內(nèi)存中,并沒有銷毀。再次返回該組件時(shí),Vue會(huì)從緩存中直接讀取組件并渲染,這就是組件緩存。
怎么清除組件緩存, Vue提供了兩種方法來清除組件緩存
1. $destroy
組件提供了一個(gè)實(shí)例方法$destroy,可以用來銷毀組件實(shí)例。一旦組件被銷毀,它所持有的內(nèi)存及事件監(jiān)聽器都被清除掉,組件在下一次被加載時(shí),就會(huì)重新生成實(shí)例,從而達(dá)到清除緩存的目的。例如:
this.$destroy();
2. key屬性
Vue在渲染組件的時(shí)候,會(huì)根據(jù)組件的key屬性來決定是否復(fù)用組件。如果兩次渲染的組件key值不同,Vue會(huì)銷毀之前的組件實(shí)例,并重新生成一個(gè)組件實(shí)例用于渲染。因此,我們可以通過改變組件的key值來達(dá)到清除組件緩存的目的。例如:
<keep-alive>
<router-view :key="$route.fullPath" />
</keep-alive>
總結(jié)一下,Vue的組件緩存能夠顯著提高性能,但是在某些場景下,需要清除組件緩存。Vue提供了兩種方法來清除組件緩存,一是通過$destroy方法來銷毀組件實(shí)例,二是通過改變組件的key屬性來達(dá)到清除緩存的目的。