<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳解如何理解vue的key屬性

        來源:懂視網 責編:小采 時間:2020-11-27 21:58:54
        文檔

        詳解如何理解vue的key屬性

        詳解如何理解vue的key屬性:如果沒有這個屬性的時候vue應用 in-place patch(就地復用)策略。列表里的順序發生改變的時候比如shuffle(列表打亂)的時候,vue為了提升性能,不會移動dom元素,只是更新相應元素的內容節點。 就地復用的弊端 這個默認的模式是高效的,但是只適用于不依賴
        推薦度:
        導讀詳解如何理解vue的key屬性:如果沒有這個屬性的時候vue應用 in-place patch(就地復用)策略。列表里的順序發生改變的時候比如shuffle(列表打亂)的時候,vue為了提升性能,不會移動dom元素,只是更新相應元素的內容節點。 就地復用的弊端 這個默認的模式是高效的,但是只適用于不依賴

        如果沒有這個屬性的時候vue應用 in-place patch(就地復用)策略。列表里的順序發生改變的時候比如shuffle(列表打亂)的時候,vue為了提升性能,不會移動dom元素,只是更新相應元素的內容節點。

        就地復用的弊端

        這個默認的模式是高效的,但是只適用于不依賴子組件狀態或臨時 DOM 狀態 (例如:表單輸入值) 的列表渲染輸出。

        如上引用自官網,這個模式就是上面的“就地復用”策略。那么是不是依賴子組件狀態的列表渲染采用上面的模式就出問題了呢。如下測試代碼:

         <ul>
         <li v-for="item in items">
         <p>{{ item.title }}</p>
         <p>{{ item.des }}</p>
         <tweet-component></tweet-component>
         </li>
         </ul>
         <script>
         Vue.component("tweet-component", {
         template: `
         <div class="tweet">
         <div class="box">
         {{xixi}}
         </div>
         </div>
         `,
         data() {
         return {
         xixi: Math.random()
         };
         }
         });
         new Vue({
         el: "#app",
         data: {
         items: [
         { title: "nihao1", des: "xiexie1" },
         { title: "nihao2", des: "xiexie2" },
         { title: "nihao3", des: "xiexie3" }
         ]
         },
         methods: {
         shuffle() {
         // lodash的shuffle方法
         this.items = _.shuffle(this.items);
         }
         }
         });
         </script>

        操作如下:

         

        問題出現了:發生變化時,子組件 沒有更新

        ps: 測試臨時 DOM 狀態 (例如:表單輸入值)可以參考這個鏈接 List Rendering and Vue's v-for Directive

        key的作用

        這個時候引入 key 就可以解決這個問題。 key 的作用是給予一個節點唯一的身份識別,有相同父元素的子元素必須有獨特的 key 。這樣它可以前后對比,算出哪些節點是要重復使用或者調整順序。比如原先的 key 的順序是 i1,i2,i3 ,之后變成了 i2,i1,i3 這個時候只要i3保持不變,把i2 insertBefore 到i1節點前就行了(以上是舉例,vue具體怎么操作的需要去研究源碼)。如果是利用數組的 index 來作為 key 則兩次對比沒有區別,就會出現上面動圖里出現的子組件沒有更新的情況。

        可以通過查看下面兩個動圖查看dom節點的變化。第一個gif是沒有使用 key ,第二個是使用了 key 。可以看到我點了按鈕后,第一個只是更新 <p> 標簽的內容節點。第二個是移動了某一項的 <li> 標簽。

        ps: 另外可以通過chrome的dom斷點功能查看子元素的插入刪除。

        DOM 更改斷點

        key的其他用途

        key不是只能用在v-for上還可以用在其他元素上。如下代碼

        <div v-if="toggle">Hello</div>
        <div v-else>Goodbye</div>

        切換toggle時,它也是切換div。如果你想用上enter/leave animations時,即節點插入和刪除的時候的動畫時就要打破這個復用,如下:

        <transition>
         <div v-if="toggle" key="1">Hello</div>
         <div v-else key="2">Goodbye</div>
        </transition>

        總結

        如果你的列表不發生變化,或者你只是往列表最后一項添加元素則看似不必要增加 key 字段。但是你的項目中有很多列表的時候,你有的需要加 key ,有的不需要加。還不如所有的都加上呢避免別人理解困難(^._.^)ノ。

        參考鏈接

        https://vuejs.org/v2/guide/list.html#key

        vuejs.org/v2/api/#key

        https://forum.vuejs.org/t/simple-clarification-of-when-using-key-with-v-for-is-appropriate-and-why/28966/5

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳解如何理解vue的key屬性

        詳解如何理解vue的key屬性:如果沒有這個屬性的時候vue應用 in-place patch(就地復用)策略。列表里的順序發生改變的時候比如shuffle(列表打亂)的時候,vue為了提升性能,不會移動dom元素,只是更新相應元素的內容節點。 就地復用的弊端 這個默認的模式是高效的,但是只適用于不依賴
        推薦度:
        標簽: 如何 VUE 理解
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎成年永久免费网站| 亚洲av无码一区二区三区人妖| 一级毛片人与动免费观看| 在线免费视频一区| 亚洲熟妇无码八V在线播放| 噼里啪啦免费观看高清动漫4| 亚洲精品亚洲人成在线麻豆| 免费国产黄网站在线观看| 亚洲综合成人网在线观看| 99久久99热精品免费观看国产| 亚洲国产一区二区三区青草影视| 光棍天堂免费手机观看在线观看 | 午夜一级免费视频| 亚洲欧洲无码AV不卡在线| 日本大片在线看黄a∨免费| 色偷偷亚洲第一综合| mm1313亚洲精品国产| 亚洲免费在线观看| 亚洲人成网站在线播放vr| 最新亚洲成av人免费看| 国产成人亚洲精品91专区手机| 一级做a毛片免费视频| 久久久久久久久久国产精品免费 | 久久WWW免费人成人片| 亚洲五月综合网色九月色| 免费做爰猛烈吃奶摸视频在线观看 | 久久精品国产亚洲av水果派| 黄网站色视频免费在线观看的a站最新| 四虎免费久久影院| 国产亚洲成在线播放va| 日本免费高清一本视频| 亚洲a∨无码男人的天堂| 30岁的女人韩剧免费观看| 久久亚洲国产中v天仙www| 97人妻无码一区二区精品免费| 亚洲Av高清一区二区三区| 免费特级黄毛片在线成人观看| 特级毛片免费播放| 亚洲爆乳精品无码一区二区三区| 全部免费毛片在线播放| 亚洲国产综合精品|