日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue 中的组件缓存

發布時間:2024/7/5 vue 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue 中的组件缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、介紹

先來看一個問題?

從首頁的區塊鏈模塊切換到文章詳情頁面,再從文章詳情頁面回到首頁,我們發現首頁重新渲染原來的狀態沒有了,又回到了推薦模塊。

首先,這是正常的狀態,并非問題,路由在切換的時候會銷毀切出去的頁面組件,然后渲染匹配到的頁面組件。

但是我想要某些頁面保持狀態,而不會隨著路由切換導致重新渲染。

二、解決方案

使用 keep-alive 緩存組件

官方文檔:在動態組件上使用 keep-alive

主要用于保留組件狀態或避免重新渲染,當它包裹動態組件時,會緩存不活動的組件實例,而不是銷毀它們。

(1)組件緩存不是持久化,它只是在應用運行期間不會重新渲染,如果頁面刷新還是會回到初始狀態。

(2) 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現在組件的父組件鏈中。

(3) 要求被切換到的組件都有自己的名字,不論是通過組件的 name 選項還是局部/全局注冊。

(4)組件生命周期鉤子和緩存

(5)include 和 exclude 屬性允許組件有條件地緩存。二者都可以用逗號分隔字符串、正則表達式或一個數組來表示。

<!-- 逗號分隔字符串 --> <keep-alive include="a,b"><component :is="view"></component> </keep-alive><!-- 正則表達式 (使用 `v-bind`) --> <keep-alive :include="/a|b/"><component :is="view"></component> </keep-alive><!-- 數組 (使用 `v-bind`) --> <keep-alive :include="['a', 'b']"><component :is="view"></component> </keep-alive>

匹配首先檢查組件自身的 name 選項,如果 name 選項不可用,則匹配它的局部注冊名稱 (父組件 components 選項的鍵值)。匿名組件不能被匹配。

三、項目中的緩存配置

參考鏈接:

https://juejin.im/post/5d22f0f3f265da1b94216d0b

問題描述:


我們希望

  • 登錄成功后,就把緩存給清除掉,讓組件重新進行渲染。

  • 等頁面渲染完成后,再給頁面加上緩存(keep-alive)

  • 實現思路:給keep-alive 的include屬性綁定一個動態的數組,因為keep-alive只會緩存include數組中的組件

    首頁在Vuex容器中定義這個動態數組cachePages:

    然后,在用戶登錄成功之后,清除layout組件的緩存:


    這樣就解決了上面提到的,用戶1登錄后退出登錄,使用用戶2的賬號登錄時,”我的“頁面的個人信息展示的還是用戶1的個人信息的問題。

    但是此時,layout組件沒有緩存,當登錄的用戶從區塊鏈頻道點擊 某篇文章 -> 進入文章詳情頁面后,再返回到首頁時,首頁會重新進行渲染,無法回到之前用戶所在的區塊鏈頻道,而是直接變成首頁渲染成功后默認顯示的推薦頻道。

    為了解決這個問題:我們可以在layout組件的渲染完成之后,給它加上緩存。

    解決緩存帶來的列表滾動位置問題:

    就是列表滾動的位置沒有緩存下來,也就是用戶在首頁的 區塊鏈模塊的文章列表滾動了一段距離后,進去文章詳情頁面,再返回到首頁時,頁面確實還在區塊鏈模塊,但是列表滾動的位置又回到了列表頂部。


    layout切換到文章詳情頁面,觸發activated生命鉤子:

    文章詳情頁面切換到layout,觸發deactivated生命鉤子:

    總結

    以上是生活随笔為你收集整理的Vue 中的组件缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。