• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    主站蜘蛛池模板: 国产精品无码一区二区在线| 人妻少妇看A偷人无码精品视频 | 国产精品综合色区在线观看| 国产精品香蕉在线观看| 国产精品污WWW在线观看| 日韩美女18网站久久精品| 国产精品99| 国产精品亚洲专区在线观看 | 国产精品综合色区在线观看| 亚洲欧美日韩国产精品影院| 国产乱人伦偷精品视频不卡| 欧美精品免费观看二区| 国产a∨精品一区二区三区不卡| 中文精品人人永久免费| 久久久久久久亚洲精品| 国产精品乱码一区二区三区| 国内精品久久九九国产精品| 精品久久久噜噜噜久久久| 亚洲精品制服丝袜四区| 久久精品无码一区二区日韩AV| 99久久www免费人成精品| 精品久久久久久国产| 国产精品高清一区二区三区| 精品无码久久久久久午夜| 午夜精品久久久久久毛片| 亚洲精品国产va在线观看蜜芽| 久久久久国产精品嫩草影院 | 91在线手机精品超级观看| 99久久99这里只有免费的精品| 国产精品综合色区在线观看| 精品久久无码中文字幕| 国精品午夜福利视频不卡| 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲日韩欧美制服精品二区| 亚欧乱色国产精品免费视频| 欧美在线精品永久免费播放| 久久夜色精品国产亚洲av| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 日韩精品久久无码人妻中文字幕| 夜夜精品无码一区二区三区| 亚洲精品国产日韩无码AV永久免费网 |