最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何理解vue的key屬性

 更新時間:2019年04月14日 11:48:11   作者:嘻嘻xixi  
這篇文章主要介紹了詳解如何理解vue的key屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

就地復用的弊端

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

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

 <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>

操作如下:

 

問題出現(xiàn)了:發(fā)生變化時,子組件 沒有更新

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

key的作用

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

可以通過查看下面兩個動圖查看dom節(jié)點的變化。第一個gif是沒有使用 key ,第二個是使用了 key ??梢钥吹轿尹c了按鈕后,第一個只是更新 <p> 標簽的內容節(jié)點。第二個是移動了某一項的 <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時,即節(jié)點插入和刪除的時候的動畫時就要打破這個復用,如下:

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

總結

如果你的列表不發(fā)生變化,或者你只是往列表最后一項添加元素則看似不必要增加 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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue3中的createApp分析

    vue3中的createApp分析

    這篇文章主要介紹了vue3中的createApp分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 淺析vue數(shù)據(jù)綁定

    淺析vue數(shù)據(jù)綁定

    本文主要介紹了vue數(shù)據(jù)綁定的相關知識,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • vue+elementUI中el-radio設置默認值方式

    vue+elementUI中el-radio設置默認值方式

    這篇文章主要介紹了vue+elementUI中el-radio設置默認值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Vue3如何自定義指令directive(如權限控制)

    Vue3如何自定義指令directive(如權限控制)

    本文詳細介紹了如何在Vue3項目中創(chuàng)建自定義指令directive1,首先,在src/directives/index.ts文件中引入自定義指令,然后,創(chuàng)建src/directives/permission.ts文件來定義具體指令邏輯,在main.ts文件中引入并注冊該指令,最后,在頁面中使用自定義指令
    2024-12-12
  • 一文詳解vue生命周期在uniapp中的用法

    一文詳解vue生命周期在uniapp中的用法

    在uniapp中,vue的生命周期的用法基本都得以保留,但是對于特殊的需求以及特殊的情況,uniapp還引入了一些特有的生命周期鉤子,本文給大家詳細介紹了vue生命周期在uniapp中的用法,感興趣的朋友可以參考下
    2024-01-01
  • vue el-switch綁定數(shù)值時需要注意的問題

    vue el-switch綁定數(shù)值時需要注意的問題

    在Vue中使用`el-switch`組件時,綁定數(shù)值類型時應使用布爾值(true/false),而綁定字符串類型時應使用字符串('true'/'false')
    2024-12-12
  • 基于vue-cli vue-router搭建底部導航欄移動前端項目

    基于vue-cli vue-router搭建底部導航欄移動前端項目

    這篇文章主要介紹了基于vue-cli vue-router搭建底部導航欄移動前端項目,項目中主要用了Flex布局,以及viewport相關知識,已達到適應各終端屏幕的目的。需要的朋友可以參考下
    2018-02-02
  • Vue關鍵字搜索功能實戰(zhàn)小案例

    Vue關鍵字搜索功能實戰(zhàn)小案例

    在vue項目中,搜索功能是我們經(jīng)常需要使用的一個場景,下面這篇文章主要給大家介紹了關于Vue關鍵字搜索功能的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Vue解析剪切板圖片并實現(xiàn)發(fā)送功能

    Vue解析剪切板圖片并實現(xiàn)發(fā)送功能

    這篇文章主要介紹了Vue解析剪切板圖片并實現(xiàn)發(fā)送功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • vue項目移動端實現(xiàn)ip輸入框問題

    vue項目移動端實現(xiàn)ip輸入框問題

    這篇文章主要介紹了vue項目移動端實現(xiàn)ip輸入框問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論

罗山县| 鸡西市| 南涧| 慈溪市| 同仁县| 黎平县| 酉阳| 高雄市| 千阳县| 镇坪县| 永靖县| 石景山区| 延庆县| 威远县| 靖宇县| 格尔木市| 崇阳县| 海盐县| 嘉荫县| 昭觉县| 扬中市| 德江县| 奉新县| 石景山区| 聂荣县| 衡山县| 南开区| 东台市| 黄龙县| 福鼎市| 天气| 衢州市| 贺州市| 客服| 新丰县| 比如县| 城步| 扎兰屯市| 濮阳市| 崇仁县| 平江县|