<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          keep-alive理解及注意事項

          共 1949字,需瀏覽 4分鐘

           ·

          2021-09-02 01:55

          keep-alive 是 vue 中內(nèi)置組件,用 keep-alive 包裹的組件,用來緩存和保留當(dāng)時狀態(tài)的組件實例,而不是銷毀它們

          主要是保存當(dāng)時的組件狀態(tài)和避免重復(fù)創(chuàng)建,避免重復(fù)渲染導(dǎo)致的性能問題

          特點

          1. 它是一個抽象組件,本身不會渲染一個 dom 元素,也不會出現(xiàn)在組件中的父組件鏈上
          2. 當(dāng)組件在 keep-alive 內(nèi)被切換的時候,組件內(nèi)的 activateddeactivated 這兩個生命周期鉤子函數(shù)會被執(zhí)行。組件一旦被緩存,再次渲染就不會執(zhí)行 created、mounted 生命周期鉤子函數(shù)。
          3. 要求同時只有 1個 子組件被渲染
          4. 函數(shù)式組件不能用,因為它們沒有緩存實例。

          使用場景

          官方例子:

          <!-- 1 動態(tài)組件(所謂動態(tài)組件就是讓多個組件使用同一個掛載點,并動態(tài)切換。) -->
          <keep-alive>
            <component is="currentComponent"></component>
          </keep-alive>
          <!-- 2 多個條件判斷的子組件 -->
          <keep-alive>
            <comp-a v-if="true"></comp-a>
            <comp-b v-else></comp-b>
          </keep-alive>
          <!-- 3 transition -->
          <transition>
            <keep-alive>
              <component is="currentComponent"></component>
            </keep-alive>
          </transition>
          <!-- 4 結(jié)合vue-router -->
          <keep-alive>
            <router-view></router-view>
          </keep-alive>

          props

          1. include 名單 只有名稱匹配的組件會被緩存
          2. exclude 名單 任何匹配的組件都不會被緩存
          3. max 最多緩存多少實例,一旦達(dá)到這個數(shù)字,新實例被創(chuàng)建之前,會銷毀已緩存組件中最久沒有被訪問到的實例---LRU 算法

          include 和 exclude 首先檢查組件的 name 屬性,如果 name 不可用,則匹配局部注冊名稱。

          匿名組件不能被匹配

          需要注意的地方

          關(guān)于生命周期

          當(dāng)引入 keep-alive 的時候, 頁面第一次進(jìn)入,生命周期鉤子的觸發(fā)順序:created --- mounted----activated;
          退出時觸發(fā) deactivated
          當(dāng)再次進(jìn)入的時候,只觸發(fā) activated

          返回 dom 不讓其重新刷新,只執(zhí)行一次的放在 mounted 中;
          組件每次進(jìn)去執(zhí)行的方法放在 activated 中。

          關(guān)于注冊組件

          在 keep-alive 中直接添加 include,cachedViews----Array 類型:包含 vue 文件的組件 name 都將被緩存起來;反之 exclude 則是不會被緩存;

          exclude 的優(yōu)先級大于 include
          也就是說:當(dāng) include 和 exclude 同時存在的時候,exclude 會生效,include 不會生效的。



          END
          愿你歷盡千帆,歸來仍是少年。


          讓我們一起攜手同走前端路!

          關(guān)注公眾號回復(fù)【加群】即可

          ● 工作中常見頁面布局的n種實現(xiàn)方法

          ● 三欄響應(yīng)式布局(左右固寬中間自適應(yīng))的5種方法

          ● 兩欄自適應(yīng)布局的n種實現(xiàn)方法匯總

          ● 工作中常見的兩欄布局案例及分析

          ● 垂直居中布局的一百種實現(xiàn)方式

          ● 常用九宮格布局的幾大方法匯總

          ● 為什么操作DOM會影響WEB應(yīng)用的性能?

          ● 移動端滾動穿透的6種解決方案

          ● Vue + TypeScript 踩坑總結(jié)

          瀏覽 89
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色中文| 蜜桃乱伦网址 | 日韩天堂在线观看 | 1级毛片| 人人舔人人爽 |