v-for :key的遍历机制

1.用index作为key和不加key是一样的,都采用“就地复用”的策略
2.diff算法默认使用“就地复用”的策略,是一个首尾交叉对比的过程
3.“就地复用”的策略,只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出
4.将与元素唯一对应的值作为key,可以最大化利用dom节点,提升性能

合理利用index 和 :key 提高性能的同时 避免 受diff 的影响

 <div v-for="(item,index) in noticeData.noticeList" :key="item.id">
                    <el-row>
                        <el-form-item :label="`通知人姓名${index+1}`">
                            <el-input v-model="item.name"></el-input>
                        </el-form-item>
                    </el-row>
                    <el-row>
                        <el-form-item label="电话:">
                            <el-input v-model="item.phone"></el-input>
                        </el-form-item>
                    </el-row>
                    <el-row>
                        <el-form-item label="邮箱:">
                            <div class="item-more">
                                <el-input v-model="item.email"></el-input> <i class="el-icon-plus plus" @click="addItemHandler(item,index)"></i> <i v-if="index>0" class="el-icon-minus mius" @click="deleteItemHandler(item,index)"></i>
                            </div>
                        </el-form-item>
                    </el-row>
                </div>
            noticeData:{
                noticeDialogVisible:false,
                noticeList:[
                    {
                        name:'',
                        phone:'',
                        email:'',
                        id:1
                    }
                ]
            }
        addItemHandler(item,index){
            console.log(index,'this.noticeData.noticeList')

            if (this.noticeData.noticeList.length>9){ return this.$message.warning('每次最多通知10个联系人')}
            this.noticeData.noticeList.push({
                name:'',
                phone:'',
                email:'',
                id:this.noticeData.noticeList[this.noticeData.noticeList.length-1].id+1
            })
        },
        deleteItemHandler(item,index){
            this.noticeData.noticeList.splice(index,1)
            console.log(this.noticeData.noticeList)
        },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值