Vue-router中keep-alive的理解

? ? ? ?Vue-router的API文檔中對于keep-alive的介紹并不多,所以對于初學者來說,可能并不太理解什么是keep-alive、作用是什么,什么時候用,怎么用?所以,通過這篇文章,我為大家詳細講解一下這四個問題。如有錯誤,還請大家指正,謝謝!

1、什么是keep-alive

? ? ? ?keep-alive用來緩存組件,避免多次加載相應的組件,減少性能消耗,簡單一點來說就是從頁面1鏈接到其他頁面后回退到頁面1不用在重新執行頁面1的代碼,只會從緩存中加載之前已經緩存的頁面1,這樣可以減少加載時間及性能消耗,提高用戶體驗性。

2、keep-alive的作用是什么

? ? ? ?通過設置了keep-alive,可以簡單理解為從頁面1跳轉到頁面2后,然后后退到頁面1,只會加載緩存中之前已經渲染好的頁面1,而不會再次重新加載頁面1,及不會再觸發頁面一種的created等類似的鉤子函數,除非自己重新刷新該頁面1。

例如我的頁面1有如下代碼,該代碼具體作用是每請求一次頁面1,會獲取一些數據追加到原來的數組里,然后再渲染該數組中的數據

沒使用keep-alive的清況:

剛開始頁面1只有2個數據,如圖一,當鏈接到頁面2后再回退到頁面1是會出現圖二的情況,因為回退到頁面1后會重新觸發上面的代碼,追加了2個數據,所以才會出現圖二4個數據的情況。當再次鏈接到頁面2后再回退到頁面1是會出現圖三的情況

圖一
圖二
圖三

當使用了keep-alive后,無論從頁面1鏈接到其他頁面再回退到頁面1多少次,頁面1還是只有2個數據,因為并沒有再次觸發created鉤子函數,只會從緩存中加載頁面1,這就是keep-alive的作用之處。

3、什么時候用keep-alive

如果需要頻繁切換路由,這個時候就可以考慮用keep-alive了,來達到避免數據的重復請求的目的。

4、怎么用keep-alive

<keep-alive>

? ? ? ? ? ? <router-view> </router-view>

</keep-alive>

將首次觸發請求寫在created鉤子函數中,就能實現緩存,

如果你需要緩存部分頁面或者組件,可以使用如下方法:

(1)、使用router. meta屬性


? ? ? ? ? ?表示test1都使用keep-alive,test2不使用

(2)、使用新增屬性inlcude/exclude

同時必須在test1組件js部分添加name: 'test1'

表示除了test1,其他都使用keep-alive

其中,也可動態設置,如下圖

這個時候只要動態改變Components就可以設置哪個組件不使用keep-alive。


好了,關于keep-alive的介紹就到這里,真心希望此文章對你有幫助,如果此文章有錯誤,還請大家指正,謝謝!

轉載請說明來自(http://www.lxweimin.com/p/e565cfef48e7),謝謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容