下面是关于“Vue页面渲染中key的应用实例教程”的完整攻略:
什么是key
key是一个特殊的属性,用于协助Vue区分每个节点的身份,以便在不同的渲染情况下识别其应有的状态。在Vue中,key主要用于优化虚拟DOM的渲染效率。
常见应用场景
列表渲染
在Vue中,当使用v-for指令进行列表渲染时,每个元素都需要指定一个唯一的key,以便Vue能够正确地追踪每个节点的身份,当出现位置变化、新增或删除时,能够高效地更新虚拟DOM,减少渲染次数,提高性能。
示例代码如下:
<ul>
<li v-for="item in items" :key="item.id">{{ item.title }}</li>
</ul>
动态组件
Vue中的动态组件也同样需要具有唯一的key值,用于虚拟DOM的渲染优化。
示例代码如下:
<component :is="currentTabComponent" :key="currentTabComponent"></component>
实例教程
下面将会针对列表渲染的应用场景,针对key的应用进行详细的实例教程。
示例1
我们有一个简单的todoList,数据是从父组件中通过props传入的。
<template>
<ul>
<li v-for="item in items">{{ item.title }}</li>
</ul>
</template>
<script>
export default {
props: {
items: {
type: Array,
default: () => [],
},
},
};
</script>
现在我们需要在todoList中新增一条记录,我们可以通过直接修改props传入的数据来实现。但是我们发现,虽然数据已经更新了,但是界面上并没有新增的一条记录出现。
这是因为我们在v-for中没有使用key属性,导致Vue无法区分每个节点的身份,从而没有正确的更新虚拟DOM。修复的方法可以添加唯一的key,如下:
<template>
<ul>
<li v-for="item in items" :key="item.id">{{ item.title }}</li>
</ul>
</template>
使用item.id作为key,当新增一条记录时,Vue将能够正确的识别哪个节点需要更新,从而实现渲染。
示例2
再来看一个稍微复杂一些的示例,我们有一个可排序的列表,可以拖拽调整顺序,我们使用了vuedraggable的插件来实现拖拽功能:
<template>
<draggable :list="items" @end="onDragEnd">
<div v-for="(item, index) in items" :key="item.id">
{{ item.title }} -- {{ item.order }}
</div>
</draggable>
</template>
<script>
import draggable from "vuedraggable";
export default {
components: { draggable },
data() {
return {
items: [
{ title: "item 1", id: 1, order: 1 },
{ title: "item 2", id: 2, order: 2 },
{ title: "item 3", id: 3, order: 3 },
],
};
},
methods: {
onDragEnd(e) {
this.items.forEach((item) => {
item.order = this.items.indexOf(item) + 1;
});
},
},
};
</script>
在该示例中,我们使用了v-for和vuedraggable指令,通过拖拽来调整列表顺序。但是我们会发现,拖拽并没有生效,排序顺序并没有改变。
这是因为我们在拖拽之后只是修改了数据中记录的order值,但是没有使用Vue.set或Vue.$set方法来动态修改对象属性,Vue就无法检测到变化。
修复的方法可以使用Vue.set来动态修改对象属性,如下:
<template>
<draggable :list="items" @end="onDragEnd">
<div v-for="(item, index) in items" :key="item.id">
{{ item.title }} -- {{ item.order }}
</div>
</draggable>
</template>
<script>
import draggable from "vuedraggable";
export default {
components: { draggable },
data() {
return {
items: [
{ title: "item 1", id: 1, order: 1 },
{ title: "item 2", id: 2, order: 2 },
{ title: "item 3", id: 3, order: 3 },
],
};
},
methods: {
onDragEnd(e) {
this.items.forEach((item) => {
Vue.set(item, "order", this.items.indexOf(item) + 1);
});
},
},
};
</script>
该示例讲解了在使用vue组件时,在修改对象属性时如何使用Vue.set来动态修改数据,从而能够通知Vue检测到变化,实现正确渲染。
以上就是对“Vue页面渲染中key的应用实例教程”的详细讲解,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue页面渲染中key的应用实例教程 - Python技术站