<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 使用index作為key可能會應發的問題? ### 1、效率問題,頁面不會出現展示問題 * 如果對數據進行逆序添加、刪除等破壞順序操作,會產生沒有必要的真實DOM更新,頁面效果沒有問題,但是效率低下。 * 我們希望可以在B和C之間加一個F,Diff算法默認執行起來是這樣的: ![](https://img.kancloud.cn/fe/26/fe2662bcff8f46181b21f46bf5ef644a_788x277.png) 即把C更新成F,D更新成C,E更新成D,最后再插入E,這樣效率不高,且性能不夠好。 ![](https://img.kancloud.cn/f6/d1/f6d100ec63a501081f7a8edfdf1ac143_700x229.png) ### 2、存在輸入類DOM,產生錯亂數據展示問題 * 如果DOM結構中還包括輸入類(input、textarea)DOM ,會產生錯誤的DOM更新,界面明顯看到問題。 * 如下圖所示,當我們在列表中,在每個輸入框中添加對應(數據)內容,逆向添加一個數據,在紅色框中的位置,可以看到輸入框中的數據產生錯亂。 ![](https://img.kancloud.cn/dd/e5/dde5b89a5b46438ce741d40e67641c3f_370x195.png) ![](https://img.kancloud.cn/cc/96/cc9685426bd087993bb65a4cb6d011a0_390x150.png) * 下面我們來分析一下原因 1)、初始化數據,根據數據生成虛擬DOM,將虛擬DOM轉化為展示DOM; 2)、更新數據,向初始數據逆序添加一個數據(老劉-30),生成新數據; 3)、數據變化,生成新的虛擬DOM; 4)、新舊虛擬DOM比較:查找相同key值,如果查詢到,存在差異,則以新虛擬DOM替換舊虛擬DOM,反之,則使用久虛擬DOM; 5)、如下圖,key=0時,老劉-30與張三-18不等,則替換;input則完全一樣,則使用舊虛擬DOM,但是發現沒有,key=1,2...每一步都需要替換,(張三、李四、王五都需要新舊替換)效率低下問題出現; 6)、當key=3時,在舊的虛擬DOM中未找到,則創建新的虛擬DOM; 7)、將新的虛擬DOM轉化為真實DOM。 ![](https://img.kancloud.cn/ac/d8/acd8b82e82c3d1b3fc3ce8814460e716_1259x707.png) ## 解決index作為key可能引發的問題 * 通過唯一標識作為key,則簡潔很多 1)、前四步都一樣,從第五步開始節省,查找key=004,發現在舊虛擬DOM并未找到,直接創建新的虛擬DOM; 2)、后面key=001,002,003...都在舊的虛擬DOM中查詢到,則直接使用舊虛擬DOM 3)、將新的虛擬DOM轉化為真實的DOM。 ![](https://img.kancloud.cn/fa/7d/fa7d40aa228b550b85dca16cd787534b_1455x822.png) ## 總結:key有什么作用(內部原理) ### 1、虛擬DOM中的key作用 * key是虛擬DOM對象的標識,當數據發生變化時,Vue會根據新數據生成新的虛擬DOM,隨后Vue進行新虛擬DOM和舊虛擬DOM的差異比較;比較規則如: 1)、舊虛擬DOM中找到了與新虛擬DOM相同地key:如果虛擬DOM內容沒有變化,則直接使用之前的真實DOM;如果虛擬DOM中內容發生改變,則生成新的真實DOM,隨后替換掉頁面之前的真實DOM; 2)、舊虛擬DOM中未找到與新虛擬DOM相同地key,則創建新的真實DOM,隨后渲染到頁面。 ## 開發中如何選擇key? * 最好使用每條數據的唯一標識作為key,比如id、身份賬號、手機號等等; * 如果不存在對數據逆序添加、刪除等破壞順序的操作,僅用于列表展示,使用index作為key是沒有問題的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看