1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【Vuejs】1156- 聊聊vue中的keep-alive

        共 8045字,需瀏覽 17分鐘

         ·

        2021-12-01 12:17

        大前端??前端知識(shí)寶庫(kù)??堅(jiān)持日更

        一、什么是keep-alive?

        官方介紹就是:?包裹動(dòng)態(tài)組件時(shí),會(huì)緩存不活動(dòng)的組件實(shí)例,而不是銷毀它們。和??相似,?是一個(gè)抽象組件:它自身不會(huì)渲染一個(gè) DOM 元素,也不會(huì)出現(xiàn)在組件的父組件鏈中。

        當(dāng)組件在??內(nèi)被切換時(shí),它的?mounted?和?unmounted?生命周期鉤子不會(huì)被調(diào)用,取而代之的是?activated?和?deactivated

        簡(jiǎn)單理解就是說(shuō)我們可以把一些不常變動(dòng)的組件或者需要緩存的組件用包裹起來(lái),這樣就會(huì)幫我們把組件保存在內(nèi)存中,而不是直接的銷毀,這樣做可以保留組件的狀態(tài)或避免多次重新渲染,以提高頁(yè)面性能

        二、使用用法

        我們先根據(jù)官方文檔來(lái)回顧一下組件的具體用法,如下:

        組件可接收三個(gè)屬性:

        • Props:
          • include?-?string | RegExp | Array。只有名稱匹配的組件會(huì)被緩存。
          • exclude?-?string | RegExp | Array。任何名稱匹配的組件都不會(huì)被緩存。
          • max?-?number | string。最多可以緩存多少組件實(shí)例。
        • 用法:

          include?和?exclude?prop 允許組件有條件地緩存。二者都可以用逗號(hào)分隔字符串、正則表達(dá)式或一個(gè)數(shù)組來(lái)表示:

        ??
        ??<keep-alive?include="a,b">
        ????<component?:is="view">component>

        ??keep-alive>
        ??
        ??
        ??<keep-alive?:include="/a|b/">
        ????<component?:is="view">component>

        ??keep-alive>
        ??
        ??
        ??<keep-alive?:include="['a',?'b']">
        ????<component?:is="view">component>

        ??keep-alive>

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

        max表示最多可以緩存多少組件實(shí)例。一旦這個(gè)數(shù)字達(dá)到了,在新實(shí)例被創(chuàng)建之前,已緩存組件中最久沒(méi)有被訪問(wèn)的實(shí)例會(huì)被銷毀掉。


        ??<keep-alive?:max="10">
        ????<component?:is="view">component>
        ??keep-alive>

        在這里簡(jiǎn)單介紹一個(gè)日常項(xiàng)目中有可能出現(xiàn)的場(chǎng)景并使用keep-alive來(lái)實(shí)現(xiàn)按需控制緩存 場(chǎng)景:當(dāng)我們從首頁(yè)–>列表頁(yè)–>商品詳情頁(yè)–>返回到列表頁(yè)(需要緩存)–>返回到首頁(yè)(需要緩存)–>再次進(jìn)入列表頁(yè)(不需要緩存)

        1. 在路由meta對(duì)象里定義兩個(gè)值:

          keepAlive:這個(gè)路由是否需要緩存

          deepth:代表頁(yè)面之間的前進(jìn)后退的層級(jí)關(guān)系

        ???
        ???{
        ???????path:?'*',
        ???????name:?'Home',
        ???????component:?()?=>?import(/*?webpackPreload:?true?*/?'@/views/home'),
        ???????meta:?{
        ?????????keepAlive:?true,
        ?????????deepth:?1
        ???????}
        ?????},
        ?????{
        ???????path:?'/list',
        ???????name:?'list',
        ???????component:?()?=>?import('@/views/list'),
        ???????meta:?{
        ?????????keepAlive:?true,
        ?????????deepth:?2
        ???????}
        ?????},
        ?????{
        ???????path:?'/detail',
        ???????name:?'Detail',
        ???????component:?()?=>?import('@/views/detail'),
        ???????meta:?{
        ?????????keepAlive:?true,
        ?????????deepth:?3
        ???????}
        ?????},
        ?????
        1. 監(jiān)聽(tīng)路由動(dòng)態(tài)控制需要緩存的值
        ???//3x版本router-view不允許直接寫在keep-alive里面,需注意
        ???