Vue 2.0 v-for 響應式key, index及item.id參數對v-bind:key值造成差異研究

Vue 2.0 v-for 響應式key, index及item.id參數對v-bind:key值造成差異研究

在github上閱覽README.md以獲得最佳閱讀體驗,點這里

v-for響應式key, index及item.id參數對v-bind:key值造成差異研究

實驗背景

通常情況下,我們渲染一個li列表,采用v-for指令進行渲染,我們需要給渲染的每一項元素綁定一個key值,其實綁定該key值是可選的,但會引起警告。使用v-for參數的過程中,由于v-for提供三個參數,分別是: value, key, index。對其哪一個作為元素綁定key值更能得到我們想要的響應式渲染作出實驗。

實驗目的

總結出在采用不同參數作為元素綁定key值時,出現的不同的渲染結果,得出最優渲染方案

實驗準備

我們準備第三個可以作為綁定key值的變量,分別是:

  • 渲染item自帶屬性id
  • v-for提供的key
  • v-for提供的index

我們制定一個參照表格


li綁定key值類型idindexkey
實驗一選取xx
實驗二x選取x
實驗三xx選取

實驗一

  • li綁定key值為自帶屬性id
  • 分別控制兩個變量:改變id值,對li進行排序
實驗vue.js代碼
// items data
items: [{id: 2,},{id: 1,},{id: 3,},{id: 4,},
]
<!-- dom constructor -->
<template><div class="content"><ul><li class="animate">對照組</li><li v-for="(item, key, index) in items" class="animate" v-bind:key="item.id">{{item.id}}</li><!-- 當前綁定值為item.id  --></ul></div></div>
</template>

首先使用了item.id作為綁定的key值,我們來看下效果:
渲染效果demo

  1. 改變第一個元素的id值,第一個li元素重新渲染,其余三個li元素與對照組速度始終保持一致,沒有變化,說明li元素單獨渲染
  2. 為了驗證1.觀點,我們對實驗組按照升序進行排列,查看DOM結構,當改變第一個元素位置時,第一個li元素重新渲染,其余三個li元素不重新渲染且與對照組速度始終保持一致,說明第一個li元素單獨渲染,驗證1.結論

實驗二

  • li綁定key值為 v-for提供的index參數
  • 分別控制兩個變量:改變id值,對li進行排序
實驗vue.js代碼
// items data
items: [{id: 2,},{id: 1,},{id: 3,},{id: 4,},
]
<!-- dom constructor -->
<template><div class="content"><ul><li class="animate">對照組</li><li v-for="(item, key, index) in items" class="animate" v-bind:key="index">{{item.id}}</li><!-- 當前綁定值為index  --></ul></div></div>
</template>

在實驗二中,使用v-for提供的index參數作為綁定的key值,我們來看下效果:
渲染效果demo

  1. 改變第一個元素的id值,第一個li元素與其余三個li元素與對照組速度始終保持一致,沒有變化,說明綁定index值并未對li渲染造成影響
  2. 為了驗證1.觀點,我們對實驗組按照升序進行排列,查看DOM結構,當改變第一個元素位置時,第一個li元素重新渲染,其余三個li元素也重新渲染均且與對照組速度始終保持一致,說明所有li元素均重新渲染,驗證1.結論

實驗三

  • li綁定key值為 v-for提供的key參數
  • 分別控制兩個變量:改變id值,對li進行排序
實驗vue.js代碼
// items data
items: [{id: 2,},{id: 1,},{id: 3,},{id: 4,},
]
<!-- dom constructor -->
<template><div class="content"><ul><li class="animate">對照組</li><li v-for="(item, key, index) in items" class="animate" v-bind:key="key">{{item.id}}</li><!-- 當前綁定值為key  --></ul></div></div>
</template>

在實驗二中,使用v-for提供的key參數作為綁定的key值,我們來看下效果:
渲染效果demo

  1. 改變第一個元素的id值,第一個li元素與其余三個li元素與對照組速度始終保持一致,沒有變化,說明綁定key值并未對li渲染造成影響
  2. 為了驗證1.觀點,我們對實驗組按照升序進行排列,查看DOM結構,當改變第一個元素位置時,第一個li元素重新渲染,其余三個li元素也重新渲染均且與對照組速度始終保持一致,說明所有li元素均重新渲染,驗證1.結論

實驗結論

經過三次對照實驗(我們的實驗采用了控制變量法,對照實驗法進行),我們可以得出結論:使用v-for渲染元素時,使用元素自身的id屬性去指定渲染元素的key值有利于單個元素的重新渲染,若采用其他如v-for提供的index, key等值,在改變渲染出來的DOM結構時,會觸發所有元素的重新渲染,當數據過大時,可能會造成性能負擔。

總結

當我們在使用v-for進行渲染時,盡可能使用渲染元素自身屬性的id給渲染的元素綁定一個key值,這樣在當前渲染元素的DOM結構發生變化時,能夠單獨響應該元素而不觸發所有元素的渲染。

研究成員

TimRChen
libook

轉載于:https://www.cnblogs.com/tim100/p/7262963.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

halcon edges_sub_pix算子

轉載http://blog.51cto.com/juwen/133003 介紹一下Canny算子&#xff1a; 使用累計直方圖計算兩個閥值。凡是大于高閥值的一定是邊緣&#xff1b; 凡是小于低閥值的一定不是邊緣&#xff1b;如果檢測結果大于低閥值但又小于高閥值&#xff0c;那就要看這個像素的鄰接像素中有…

Python 基礎(常用數據結構)

常用數據結構 1&#xff09;元組 元組是一種靜態的數據結構&#xff0c;無法修改&#xff0c;若要修改只能重新生成新的元組。 輸出結果&#xff1a; 元組元素的獲取是通過索引值去獲得的&#xff1b;例如上面的tup1[0]返回apple&#xff1b;另外你可以直接把tup1一次性賦給多個…

Java IO(二)——RandomAccessFile

一、RandomAccessFile RandomAccessFile類可以說是Java語言中功能最為豐富的文件訪問類&#xff0c;它提供了眾多的文件訪問方法。RandomAccessFile類支持"隨機訪問"方式&#xff0c;可以跳轉到文件的任意位置處讀寫數據。要訪問一個文件的時候&#xff0c;不想把文件…

halcon select_shape_xld按區域大小描繪xld

常用與對xld進行以面積、長、寬進行XLD的選擇操作。 select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : ) XLD&#xff1a;需要選擇的xld SelectedXLD:選擇后的xld Features:面積、長、高等 Operation&#xff1a;and、or等 Min&#xff1a;最小值門…

工業三防手持終端如何選

物聯宇手持終端作為工業級的數據采集器&#xff0c;目前[]()已廣泛應用在物流快遞、生產制造、零售、醫療、公共事業等領域。由于工業環境的復雜性&#xff0c;手持終端在惡劣的環境下作業&#xff0c;在性能、穩定性、電池耐用性上的要求都較高&#xff0c;同時還必須采用一些…

centos7 安裝python3

1.查看是否已經安裝Python CentOS 7.2 默認安裝了python2.7.5 因為一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安裝Python 然后使用命令 which python 查看一下Python可執行文件的位置 可見執行文件在/usr/bin/ 目錄下&#xff0c;切換到該…

centos svn 的搭建

一. SVN 簡介 Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理著隨時間改變的數據。 這些數據放置在一個中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏…

halcon邊緣提取和檢測常用方法

轉自&#xff1a;http://blog.csdn.net/Bob_qiuxu/article/details/46924969 一、邊緣提取 1、設置ROI興趣區域 2、快速二值化&#xff0c;并連接相鄰區域。 這樣做的目的是進一步減少目標區域&#xff0c;通過二值化將目標區域大概輪廓提取出來 3、提取最接近目標區域的輪廓…

oracle sqlplus常用命令

轉自&#xff1a;https://www.cnblogs.com/wdx8927304/p/7927613.html 一、sys用戶和system用戶Oracle安裝會自動的生成sys用戶和system用戶(1)、sys用戶是超級用戶&#xff0c;具有最高權限&#xff0c;具有sysdba角色&#xff0c;有create database的權限&#xff0c;該用戶默…

使用css繪制小三角

<div style"width:0;height:0;overflow: hidden;border-top:4px solid transparent;border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid red; "></div>轉載于:https://www.cnblogs.com/boonook/p/8570442.h…

C#與halcon聯合開發——內存溢出

1.對所以的局部零時變量HObject類的使用前后都加Dispose(); 2.對全局的HObject類變量進行如下定義 HObject liveImage null;HObject ExpGet_liveImage(){return liveImage;}void ExpSet_liveImage(HObject obj){if (liveImage ! null)liveImage.Dispose();liveImage obj.Cop…

點擊跳轉到QQ聊天界面

<!--//需要添加好友驗證--><a href"tencent://message/?uinQQ號碼&Site&Menuyes"><img src"需要點擊的圖片" width"80"/></a><!--不需要添加好友驗證--><a href"tencent://message/?Menuyes&am…

學習React的一知半解

① 初探 HMTL的渲染過程 ? 這個結構化文本就是 HTML 文本&#xff0c; HTML 中的每個元素都對應 DOM中某個節點&#xff0c;這樣&#xff0c;因為 HTML 元素的逐級包含關系&#xff0c; DOM 節點自然就構成了一個樹形結構&#xff0c;稱為 DOM 樹 。 ? 瀏覽器為了渲染 HTML 格…

DataTable 轉為ListT集合

public static List<T> HubbleTableToList<T>(this DataTable dt) where T:Class{List<T> _list new List<T>();if (dt null) return _list;T model;foreach (DataRow dr in dt.Rows)//進行循環dataTable行數據{model Activator.CreateInstance<…

工業相機與鏡頭分辨率匹配

// 轉自 奧普特講述工業相機與鏡頭分辨率匹配的技術方案 隨著機器視覺行業的發展&#xff0c;為了更好的滿足廣大客戶選配合適鏡頭的需求&#xff0c;奧普特自動化科技有限公司為您簡述工業相機如何選配合適的鏡頭&#xff0c;以及在相機與鏡頭的分辨率匹配方面的技術方案。 …

微信分享

<?php /*** Description of WxShare*微信分享* author xinjun*/ namespace Controller\Wx;use Controller\Home\HomeBase; use Model\Wx\UserModel; use Model\Wx\TokenModel; use Framework\Net\Request;class WxShare extends HomeBase {public function __construct(){p…

工業相機的靶面大小

在機器視覺中&#xff0c;工業相機是一種比較重要的配件。而在工業相機中&#xff0c;圖像傳感器又是最最關鍵核心的東西。而圖像傳感器的靶面的大小&#xff0c;往往直接關系到成像的質量。通常來講&#xff0c;圖像的成像質量與像素的大小成正比。這也就意味著&#xff0c;同…

軟件建模——第3章 項目前期

3.1 項目前期的主要工作 3.1.1 現狀分析 1.硬件分析 2.軟件分析 3.1.2 需求收集 3.1.3 粗略設計 1.體系結構設計 2.硬件&#xff08;網絡&#xff09;設計 3.應用系統設計 4.安全設計 5.配套設計 3.1.4 可行性分析 3.2 結構化的項目前期實例 3.2.1 組織分析&#xff08;自動化…

echarts_部分圖表配置_圖表click事件

額。。當然其他事件都是支持的&#xff0c;此文僅以click做簡單介紹&#xff1a; 請點擊“柱子”。。。 官方介紹&#xff1a;http://echarts.baidu.com/tutorial.html#ECharts%20%E4%B8%AD%E7%9A%84%E4%BA%8B%E4%BB%B6%E5%92%8C%E8%A1%8C%E4%B8%BA 1 function bottom_z (thisI…

mysql 5.7.25 的安裝與 安裝錯誤修改 適用于5.7解壓版

1&#xff0c;根據自己的需求去官網下載 2.解壓到自己喜歡的路徑 其中date 和 my.ini 在5.7后面的版本 解壓后是沒有的&#xff0c;需要自己配置。 可以自己創建my.ini文件 &#xff0c;但是不能自己創建date文件夾。 其中my.ini文件的配置如下&#xff08;如果報錯要將目錄文件…