<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
        主站蜘蛛池模板: 国产小视频免费观看| 久久久久久久综合日本亚洲 | 亚洲中文字幕第一页在线 | 免费人成网站在线高清| 亚洲精品在线观看视频| 在线播放亚洲精品| 欧洲乱码伦视频免费| 亚洲国产精品无码久久SM| AAA日本高清在线播放免费观看| 国产免费观看网站| 亚洲成a人片在线不卡| 国产婷婷成人久久Av免费高清 | 中文字幕 亚洲 有码 在线| 韩国免费一级成人毛片| 亚洲欧美日韩久久精品| 久久精品乱子伦免费| 国产亚洲精品无码专区| 黄网站色视频免费看无下截| 大陆一级毛片免费视频观看i| 亚洲毛片无码专区亚洲乱| 日本免费污片中国特一级| 亚洲精品国产免费| 四虎成人精品一区二区免费网站| 美女视频黄频a免费观看| 久久夜色精品国产亚洲| 国产精品免费精品自在线观看| 亚洲成AV人片在线观看无码| 亚洲免费人成视频观看| 亚洲精品国产福利片| 日本免费人成黄页网观看视频| 亚洲欧美日韩中文字幕一区二区三区| 国产一区二区三区在线观看免费| 中国黄色免费网站| 亚洲人JIZZ日本人| 国产免费一区二区视频| 亚洲综合无码一区二区痴汉| 天天摸天天碰成人免费视频| 在线免费视频你懂的| 亚洲国产精品无码av| 成人免费看片又大又黄| 亚洲国产精品精华液|