Vue之key值的解读

一、为什么会存在key值这个属性?

当元素之间进行对比的时候,如果元素有key值,那么直接通过key值进行比较

二、key值的注意事项

1、一旦使用v-for指令,必须设置key值

2、如果key值设置的是index下标,并且添加数据时,不是逆序的,那么可以使用

3、key值建议使用ID

下面我用代码,解释为什么最好不要用index作为key的值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../../public/js/vue.min.js"></script>

</head>
<body>
<div id="app">
<ul>
    <li v-for="(item,index) in obj" :key="index">
        序号:{{index}}
        >>>>>>>>
        ID:{{item.id}}
        >>>>>>>>
        姓名:{{item.name}}
        >>>>>>>>
        <input type="text">
    </li>
</ul>

    <ul>
        <li v-for="(item,index) in obj" :key="item.id">
        序号:{{index}}
        >>>>>>>>
        ID:{{item.id}}
        >>>>>>>>
        姓名:{{item.name}}
        >>>>>>>>
        <input type="text">
        </li>
    </ul>
    <button @click="addObj">添加数据</button>
</div>
</body>
</html>
<script>
    new Vue({
        el:'#app',
        data:{
            obj:[{
                id:1001,
                name:'姜泥',
            },{
                id:1002,
                name:'徐凤年',
            },{
                id:1003,
                name:'白狐脸儿',
            },]
        },
        methods:{
            addObj(){
                let arr = {
                    id:1004,
                    name:'鱼幼薇',
                }
                //当key的值为index下标的时候,添加数据的时候,
                //只要是正序就没问题
                // this.obj = [...this.obj,arr]

                //当是倒序的时候
                //因为key值为index所以,当倒序添加的时候,
                //前面的数据正常进行数组循环,而后面的input框,
                //因为添加的数据为倒序,index重新打乱了,
                //导致新增的数据index为0,原本是姜泥的input框,
                //变成了鱼幼薇的input,而最后一个没有input框
                //所以重新创建了input,而且里面没有内容
                this.obj = [arr,...this.obj]
                //所以key的值,必须为id
            }
        }
    })
</script>

如何测试:

当数据渲染出来后,我们自己在input框里面,手动添加,这个数据的id,序号或名称

key值为index下标的时候,正序添加数据,没有任何问题,但当倒序添加的时候,就会发现我上面提到的问题

但key值为id的时候,无论正序还是倒序都没有任何问题,所以建议key的值为id

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值