vue中動態組件,添加和刪除緩存 keep-alive

keep-alive介紹
Vue的抽象組件,自身不會渲染一個DOM元素,也不會出現在父組件鏈中,能將組件在切換過程中將狀態保存在內存中,防止重複渲染DOM
包裹動態組建時,會緩存不活動的組件實例,而不是銷燬它們
當組件在 keep-alive內被切換時,它的activated和deactivated這兩個生命週期鉤子函數將會被執行
Props
include - 字符串或正則表達式。只有名稱匹配的組件會被緩存
exclude - 字符串或正則表達式。任何名稱匹配的組件都不會被緩存
max - 數字。最多可以緩存多少組件實例
匹配規則
匹配首先檢查組件自身的 name 選項,如果 name 選項不可用,則匹配它的局部註冊名稱 (父組件 components 選項的鍵值)。匿名組件不能被匹配,這裏匿名組件暫時還沒有具體搞懂,希望有大神路過此地時指點一二。

注意
include 和 exclude 屬性允許組件有條件地緩存。二者都可以用逗號分隔字符串、正則表達式或一個數組來表示
exclude優先級大於include
max:最多可以緩存多少組件實例。一旦這個數字達到了,在新實例被創建之前,已緩存組件中最久沒有被訪問的實例會被銷燬掉
keep-alive 要求被切換到的組件都有自己的名字,不論是通過組件的 name 選項還是局部/全局註冊
字符串和數組表示的區別:
當:include=""爲空字符串時,代表被keep-alive包裹的組件都緩存
當:include=[]爲空數組時,代表不緩存被keep-alive包裹的組件
<keep-alive>嵌套<keep-alive>對max的影響
外層<keep-alive>中設置的max只對它包裹的組件有影響
外層嵌套的內層<keep-alive>內的緩存組件數量不會加到外層<keep-alive>的max上,
動態刪除外層緩存的某組件,則其內層<keep-alive>緩存的組件也會一併刪除
keep-alive包裹的組件多出的鉤子函數
activated:組件激活時調用,在組件第一次渲染時也會被調用,之後每次keep-alive激活時被調用
deactivated:組件停用時調用
說明
當組件第一次渲染時activated也會被調用,即beforeCreate -> created -> beforeMount -> mounted -> activated
當跳轉另一組件時即當前組件被停用時,則只會調用deactivated,它的beforeDestroy和destroy不會被調用
當再次激活此組件時,則也只會調用activated,其它鉤子函數也不會調用
注意
只有組件被keep-alive包裹時,這兩個生命週期函數纔會被調用,正常組件不會調用這兩個函數
使用exclude排除之後的組件,就算包裹在keep-alive中,這兩個函數也不會被調用
在服務器端渲染期間不被調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章