列表渲染 之 v-for遍歷數(shù)組和對(duì)象(利用key屬性實(shí)現(xiàn)高效更新)

(1) 遍歷數(shù)組和對(duì)象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <span>列表</span>
        <ul>
            <li>{{list[0]}}</li>
            <li>{{list[1]}}</li>
            <li>{{list[2]}}</li>
            <li>{{list[3]}}</li>
        </ul>

        <span>遍歷數(shù)組</span>
        <!-- 在遍歷過程中,不使用索引值 -->
        <ul>
            <li v-for="item in list">{{item}}</li>
        </ul>
        <!-- 在Vue2.0中數(shù)組的索引和值的順序?yàn)関-for="(值,索引) in array",而在Vue1.0中順序相反。 -->
        <ul>
            <li v-for="(item,index) in list" :key="index">{{index}}-{{item}}</li>
        </ul>


        <span>遍歷對(duì)象</span>
        <!-- 1. 若只獲取一個(gè)值:那么獲取的是value -->
        <ul>
            <li v-for="item in user">{{item}}</li>
        </ul>
        <!-- 2. 獲取value和key: 在Vue2.0中是v-for="(value,key) in object",而在Vue1.0中順序相反。 -->
        <ul>
            <li v-for="(item,key) in user">{{key}}:{{item}}</li>
        </ul>
        <!-- 2. 獲取value、key和index: 在Vue2.0中是v-for="(value,key,index) in object",而在Vue1.0中順序相反。 -->
        <ul>
            <li v-for="(item,key,index) in user">{{index}}:{{key}}:{{item}}</li>
        </ul>

    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            list:["火龍果","龍眼","獼猴桃","櫻桃"],
            user:{
                name:"liy",
                phone:"123456"
            }
        }  
    });
</script>
</html>

(2) key屬性的作用

  • 說明:在列表中間節(jié)點(diǎn)插入新的數(shù)據(jù)節(jié)點(diǎn)時(shí),即若希望在B和C之間加入一個(gè)F,Diff算法(Vue的虛擬DOM的different算法)會(huì)將之前的C更新為F、D更新為C、E更新為D、然后再更新E,效率很低。
中間插入.png
  • key的作用:使用key來給每一個(gè)節(jié)點(diǎn)添加一個(gè)唯一標(biāo)識(shí),此時(shí)Diff算法就可以正確地識(shí)別此節(jié)點(diǎn) 并 找到正確的位置插入新的節(jié)點(diǎn),從而高效地更新虛擬DOM,提升性能。
  • 注意:我們?cè)谑褂胿-for時(shí),建議為對(duì)應(yīng)的元素或組件添加一個(gè)key屬性;但是key需要具有唯一性,可使用item作為key,使用index作為key值其實(shí)無意義(并不能提升更新效率)。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="item in list" :key="item">{{item}}</li>
        </ul>
    </div>
</body>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            list:["火龍果","龍眼","獼猴桃","櫻桃"]
        }  
    });
</script>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容