面试题答案
一键面试1. 数据结构设计
- 建议使用数组来存储大量数据项。例如:
data() {
return {
largeDataList: []
}
}
如果数据项有复杂的结构,可以将其设计为对象。比如:
{
id: 1,
name: 'item1',
value: 'Some value'
}
2. 模板写法
- 使用
v - for
指令来遍历列表。为了让Vue能够高效地跟踪每个节点的身份,给v - for
提供一个唯一的key
。例如:
<template>
<template v - fragment>
<div v - for="item in largeDataList" :key="item.id">
<!-- 展示数据项的具体内容 -->
<span>{{ item.name }}</span>
<span>{{ item.value }}</span>
</div>
</template>
</template>
这里使用 <template v - fragment>
避免额外的DOM节点,减少DOM树的深度,提升渲染性能。
3. 可能用到的Vue特性
- 计算属性:如果列表中的数据需要经过一些计算才能展示,可以使用计算属性。例如,如果要展示一个过滤后的列表:
computed: {
filteredList() {
return this.largeDataList.filter(item => item.value.includes('特定字符'))
}
}
然后在模板中遍历 filteredList
。
- watch:当列表数据频繁更新时,可以使用
watch
来监听数据变化,并进行一些性能优化的操作。比如,当列表数据更新时,延迟执行某些DOM操作,以减少不必要的重绘和回流:
watch: {
largeDataList: {
immediate: true,
handler(newVal) {
// 使用防抖或节流处理数据更新后的操作
setTimeout(() => {
// 处理DOM操作等
}, 300);
}
}
}
- 虚拟DOM:Vue会自动利用虚拟DOM机制,当数据变化时,它会对比新旧虚拟DOM树,只更新变化的部分,从而提升性能。我们在设计时,尽量保持数据结构的稳定性,避免频繁的大规模数据变动,这样虚拟DOM的对比效率会更高。