VUE——v-for中key的使用注意事项,v-if和v-show的使用和特点

Vue.js在v-for循环中采用'就地复用'策略,当数据顺序改变时,通过key属性来跟踪每个节点的身份,以重用和重新排序元素。key的使用对于列表渲染至关重要。另一方面,v-if和v-show用于条件渲染,v-if适合不频繁切换的情况,因为它有较高的切换消耗,而v-show适合频繁切换,因其初始渲染成本高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当Vue.js用v-for正在更新已渲染过的元素列表时,默认用“就地复用”策略。
如果数据项的顺序被改变,Vue将不是移动DOM元素来匹配数据项的顺序,而是简单复用此处每个元素,并确保它在特定索引下显示已被渲染过的每个元素。
为了给Vue提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项提供一个唯一key属性。

v-for循环中key属性的使用

    <div id="app">
        <div>
            <label>Id:
                <input type="text" v-model="id">
            </label>

            <label>Name:
                <input type="text" v-model="name">
            </label>

            <input type="button" value="添加" @click="add">
        </div>

        <!--v-for循环的时候,key属性只能使用number获取string-->
        <!--key在使用的时候,必须使用v-bind属性绑定的形式,指定key的值-->
        <!--在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,
        必须在使用v-for的同时指定唯一的字符串或数字类型的:key值-->
        <p v-for="item in list" :key="item.id">
            <input type="checkbox">{{item.id}} --- {{item.name}}
        </p>
    </div>

    <script>
        //创建Vue实例,得到ViewModel
        var vm = new Vue({
            el: '#app',
            data: {
                id:'',
                name: '',
                list: [
                    { id: 1, name: '蔡文姬'},
                    { id: 2, name: '程咬金'},
                    { id: 3, name: '狄仁杰'},
                    { id: 4, name: '高渐离'},
                ]
            },
            methods: {
                add(){ //添加方法
                    this.list.push({id: this.id, name: this.name})
                }
            }
        });
    </script>

v-if和v-show的使用和特点
v-if有更高的切换消耗而v-show有更高的初始渲染消耗。因此,如果需要频繁切换v-show较好,如果在运行时条件不大可能改变v-if较好。

    <div id="app">
        <!--<input type="button" value="toggle" @click="toggle">-->
        <input type="button" value="toggle" @click="flag=!flag">

        <!--v-if的特点:每次都会重新删除或创建元素-->
        <!--v-show的特点:每次不会重新进行DOM的删除和创建操作,只是切换了元素的display: none样式-->

        <!--v-if有较高的切换性能消耗-->
        <!--v-show有较高的初始渲染消耗-->

        <!--如果元素涉及到频繁切换,最好不要使用v-if,而是推荐使用v-show-->
        <!--如果元素可能永远也不会被显示出来被用户看到,则推荐使用v-if-->
        <h3 v-if="flag">这是用v-if控制的元素</h3>
        <h3 v-show="flag">这是用v-show控制的元素</h3>

    </div>

    <script>
        //创建Vue实例,得到ViewModel
        var vm = new Vue({
            el: '#app',
            data: {
                flag: true
            },
            methods: {
                toggle(){
                    this.flag = !this.flag
                }
            }
        });
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值