Advertisement

VUE2.x中key关键字的作用以及为什么不能用index做key(解读并展示官网说法)

阅读量:

直接上图

本文适用于那些不理解为何需要键值对的人。
它能够实现将数据项与索引关联起来的功能。
例如,在VUE中,默认情况下会采用"就地更新"策略。
当Vue正在更新使用v-for渲染的元素列表时,
它默认会采用"就地更新"策略。
如果数据项的顺序被改变,
Vue不会移动DOM元素来匹配数据项的顺序,
而是就地更新每个元素,
并确保它们在每个索引位置正确渲染。
这个机制类似于VUE 1.x中的track-by="$index"模式。
这种默认的行为非常高效,
但它仅适用于不依赖子组件状态或临时DOM状态的情况(例如表单输入值)。
此句话源自官网,
而本文则对其进行了详细解析。

复制代码
    <div class="content">
        <ul>
            <li v-for="(list,index) in lists">
                {{list.id}}-{{list.name}}
                <button @click='deletelist(index)'>删除{{list.id}}</button>
                <input>
            </li>
        </ul>
    </div>
    <script>
        const vm = new Vue({
            el:'.content',
            data:{
                lists:[
                    {id:1,name:'bob'},
                    {id:2,name:'web'},
                    {id:3,name:'joke'}
                ]
            },
            methods: {
                deletelist(index){
                    this.lists.splice(index,1);
                }
            },
        })
        
    </script>

点击删除2

在这里插入图片描述

我们注意到第二个input被移动到了第三个位置上,在这里Key发挥了作用,并且这并不是我们所预期的结果

问题依旧存在

结论:给key加上index等于没有加,key默认得就是Index

解决:

以Vue作为一个实例为例,在其开发过程中需要追踪各个节点的标识信息,并在此基础上重复利用并按新的顺序排列现有的元素

复制代码
    <div class="content">
        <ul>
            <li v-for="(list,index) in lists" :key="list.id">
                {{list.id}}-{{list.name}}
                <button @click='deletelist(index)'>删除{{list.id}}</button>
                <input>
            </li>
        </ul>
    </div>
    <script>
        const vm = new Vue({
            el:'.content',
            data:{
                lists:[
                    {id:1,name:'bob'},
                    {id:2,name:'web'},
                    {id:3,name:'joke'}
                ]
            },
            methods: {
                deletelist(index){
                    this.lists.splice(index,1);
                }
            },
        })
        
    </script>
在这里插入图片描述

问题解决!

全部评论 (0)

还没有任何评论哟~