1. 使用Vue的条件渲染和列表渲染实现该功能
- 数据准备:在Vue实例的
data
中定义商品列表数据,每个商品对象包含库存信息等属性。例如:
data() {
return {
pageSize: 10,
currentPage: 1,
products: [
{ id: 1, name: '商品1', stock: 10 },
{ id: 2, name: '商品2', stock: 0 },
// 更多商品数据
]
};
}
- 列表渲染:使用
v - for
指令来循环渲染商品列表。例如:
<ul>
<li v - for="product in getPagedProducts" :key="product.id">
<!-- 商品名称等其他信息 -->
<span>{{ product.name }}</span>
<!-- 根据库存情况显示不同样式 -->
<span :style="{ color: product.stock > 0? 'green' :'red' }">
{{ product.stock > 0? '有库存' : '无库存' }}
</span>
</li>
</ul>
- 分页处理:通过计算属性
getPagedProducts
来获取当前页的商品数据。例如:
computed: {
getPagedProducts() {
const startIndex = (this.currentPage - 1) * this.pageSize;
const endIndex = startIndex + this.pageSize;
return this.products.slice(startIndex, endIndex);
}
}
2. 性能优化点及解决方案
- 优化点:
- 大量数据渲染:当商品数据量很大时,一次性渲染所有分页数据可能导致性能问题。
- 频繁重新渲染:商品库存变化频繁可能导致不必要的重新渲染。
- 解决方案:
- 虚拟列表:对于大量数据,可以使用虚拟列表技术。例如
vue - virtual - scroll - list
库,它只渲染可视区域内的商品,极大减少渲染的DOM元素数量,提高性能。
- 缓存计算属性:对于分页计算属性
getPagedProducts
,可以通过Vue.memoize
(如果Vue支持,或者自行实现缓存逻辑)来缓存计算结果,避免重复计算。
- 减少响应式数据变动:尽量避免直接修改商品库存数据导致整个列表重新渲染。可以考虑使用局部状态管理或者
Object.freeze
冻结不需要响应式更新的部分数据,只在必要时触发更新。