有BUG
问题描述:
为什么我删除一个元素之后,再点击增加,并没有从列表的头部增加?
相关代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>列表动画</title>
<style>
.v-enter-from {
opacity: 0;
transform: translateY(30px);
}
.v-enter-active,
.v-leave-active {
transition: all 0.5s ease-in;
}
.v-leave-active {
position: absolute;
}
.v-enter-to {
opacity: 1;
transform: translateY(0);
}
.v-leave-to {
opacity: 0;
transform: translateY(-30px);
}
.v-move {
transition: all 0.5s ease-in;
}
.list-item {
display: inline-block;
margin-right: 10px;
}
</style>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
list: [3, 2, 1],
};
},
methods: {
handleClick() {
this.list.unshift(this.list.length + 1);
},
handleDel(index) {
this.list.splice(index, 1);
},
},
template: `
<div>
<transition-group>
<span
class="list-item"
v-for="(item,index) in list"
:key="item"
:dataindex="index"
@click="handleDel(index)">
{{item}}
</span>
</transition-group>
<br>
<br>
<br>
<br>
<button @click="handleClick">增加</button>
</div>
`,
});
const vm = app.mount("#root");
</script>
</html>22
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕小李
2022-06-16 19:23:28
同学你好,这里出现bug的原因是因为this.list.splice(index, 1);改变了原来数组的长度,也就是说这里就点击删除后返回的是新的数组长度,那么我们在做增加的时候this.list.unshift(this.list.length + 1);数组的长度也发生了改变所导致的。如下:

实际效果如下:

那么也就是说list的长度一直发生改变。所以在点击删除后再添加时就会有问题。
优化建议如下:
既然更改原数组的长度会发生问题,那么我们尝试在添加时更改原有数组,在删除时我们不操作原来的数组,那么就可以解决这个问题了。如下:

js部分如下:

效果如下:


同学试试,祝学习愉快!









恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星