记录--v-for使用splice会重新渲染问题

原因很简单!就是key值不要用index!一定一定要在新增的时候设定一个唯一值给到key!这样就不会因为每次改变数据,数组长度改变导致index改变重新渲染拉!切记切记

你可以使用以下代码实现: ```html <template> <div class="container" style="width: 400px; height: 600px; overflow: hidden;"> <div class="list" style="position: relative; top: 0;"> <div class="item" v-for="(item, index) in list" :key="index" style="width: 400px; height: 200px;"> <p>{{ item.name }}</p> <p>{{ item.event }}</p> </div> </div> </div> </template> <script> export default { data() { return { list: [ { name: 'csw1', event: 'hhhhh' }, { name: 'csw2', event: 'hhhhh' }, { name: 'csw3', event: 'hhhhh' }, { name: 'csw4', event: 'hhhhh' }, { name: 'csw5', event: 'hhhhh' }, { name: 'csw6', event: 'hhhhh' }, { name: 'csw7', event: 'hhhhh' }, { name: 'csw8', event: 'hhhhh' }, { name: 'csw9', event: 'hhhhh' }, { name: 'csw10', event: 'hhhhh' }, ], currentIndex: 0, }; }, mounted() { setInterval(() => { this.currentIndex++; if (this.currentIndex >= this.list.length) { this.currentIndex = 0; } this.scrollList(); }, 5000); setInterval(() => { const newList = []; for (let i = 0; i < 10; i++) { newList.push({ name: `new${i}`, event: 'new event' }); } this.list.splice(this.currentIndex, 10, ...newList); }, 60000); }, methods: { scrollList() { const list = this.$el.querySelector('.list'); const itemHeight = 200; const top = -this.currentIndex * itemHeight; list.style.top = `${top}px`; }, }, }; </script> ``` 在这个代码中,我们使用了一个容器 `container` 来限制显示区域的大小,并将溢出的部分隐藏。我们使用了一个列表 `list` 来存储数据,并使用 `v-for` 指令将数据渲染到页面上。每个数据都被放在一个宽400px高200px的盒子里。我们使用了一个定时器来实现从下往上的轮播,每5秒滚动600px,并且每过60秒添加十条新数据。我们使用了一个 `currentIndex` 变量来记录当前显示的数据的索引,以便在定时器中更新显示的数据。我们使用了一个 `scrollList` 方法来更新列表的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值