Vue中Key的作用

91 阅读1分钟

一.key是什么


key在Vue中是DOM的标识,它只会作用于虚拟DOM中,并不会在真实DOM中展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>key的原理</title>

    <!--引入vue-->
    <script type="text/javascript" src="../js/vue.js"></script>
    
</head>
<div id="root">
    <h2>人员列表</h2>
    <ul>
        <li v-for="(p,index) in persons" :key='index'>
            {{p.name}}-{{p.age}}
        </li>
    </ul>
</div>
<body>
    <script type="text/javascript">
        const vm = new Vue({
            el:'#root',
            data:{
                persons:[
                    {'id':'001', 'name':'张三','age':'18'},
                    {'id':'002', 'name':'李四','age':'19'},
                    {'id':'003', 'name':'王五','age':'20'}
                ]
            }
        })
    </script>
</body>
</html>

2021101216170053.png image.png

在浏览器上,key是不会在真实的DOM中展示,而且一般展示列表可以默认用索引来做key,但是对于一些破坏顺序的操作,例如后面带有输入框并且有内容,用index作为key值顺序就会错乱导致出现不必要的视觉问题,最好用唯一的值,例如ID作为key值

二.key的作用


key在虚拟DOM有很大的作用,当一组数据给到Vue去渲染到页面中,会先生成虚拟DOM,然后再根据虚拟DOM去生成真实DOM,但是Vue会拿到新的虚拟DOM和旧的虚拟DOM做对比,如果没有就新增,有的话就保留,这时候key就起到很重要的作用,当元素的key是相同的时候不会去操作DOM,只会操作新增的DOM,大大的提升效率

三.key用index或者唯一值的区别


2021101216170162.png

当key为index时: 当数据后面带有输入框,使用index作为key值的时候,对数据头部进行新增或者删除,新文本替换旧文本。输入类型的 Dom 节点内容一样,直接使用旧元素,这时就出错了.当key为唯一值时:就可以完美避开这种问题的存在,同时效率也会提升