Vue(十二):列表渲染—— v-for

1.基础使用

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>基本列表</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<!-- 
    v-for指令:
        作用:用于展示列表的数据
        写法:v-for="a in xxx" :key="yyy" 
            a是内容或值,xxx可以是数组、对象、字符串、数字,key必须是唯一的
            由于历史遗留问题,in也可以写作of
            还可以写两个参数的形式 v-for="(a,b) in xxx" :key="yyy",a依旧是内容或值,b是索引或者是键(key)
        可遍历:数组、对象、字符串、数字
 -->

<body>

    <div id="root">
        <!-- 遍历数组 -->
        <h1>人员列表</h1>
        <ul>
            <li v-for="(person, index) in persons" :key="person.id">
                {{person.name}}--{{person.age}}
            </li>
        </ul>

        <!-- 遍历对象 -->
        <h1>动物信息</h1>
        <ul>
            <li v-for="(value, key) in animal" :key="key">
                {{key}}:{{value}}
            </li>
        </ul>

        <!-- 遍历字符串 -->
        <h1>字符串遍历</h1>
        <ul>
            <li v-for="(char, index) in str" ::key="index">
                {{index}}:{{char}}
            </li>
        </ul>

        <!-- 遍历一定次数 -->
        <h1>遍历一定次数</h1>
        <ul>
            <li v-for="(number, index) in 5" :key="index">
                {{index}}:{{number}}
            </li>
        </ul>
    </div>

    <script type="text/javascript">

        Vue.config.productionTip = false;

        const vm = new Vue({
            el: "#root",
            data: {
                persons: [
                    {
                        id: "001",
                        name: "张三",
                        age: 20
                    },
                    {
                        id: "002",
                        name: "李四",
                        age: 21
                    },
                    {
                        id: "003",
                        name: "王五",
                        age: 22
                    }
                ],
                animal: {
                    name: "",
                    color: "灰色",
                    price: "100元"
                },
                str: "HelloWorld"
            }
        })
    </script>
</body>

</html>

 2.key的原理

虚拟DOM中key的作用:

key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DON】,随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下

 

对比规则:

(1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

若虚拟DOM中内容没变,直接使用之前的真实DOM !
若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DON。
(2).旧虚拟DOM中未找到与新虚拟DOM相同的key
创建新的真实DOM,随后渲染到到页面。


用index作为key可能会引发的问题:
(1)若对数据进行:逆序添加、逆序删除等破坏顺序操作:
会产生没有必要的真实DOM更新==>界面效果没问题,但效率低。
(2)如果结构中还包含输入类的DOM:
会产生错误DOM更新==>界面有问题。

 


开发中如何选择key? :
最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号,学号等唯一值。如果不存在对列表的逆序添加、逆序删除等破坏顺序的功能
使用index作为key是没有间题的。

 

(本文仅作个人学习记录用,如有纰漏敬请指正)

 

posted @ 2023-07-08 10:50  谁知道水烫不烫  阅读(14)  评论(0编辑  收藏  举报