gpt4 book ai didi

vue.js - 如何为 v-for 创建唯一键

转载 作者:行者123 更新时间:2023-12-04 14:56:50 26 4
gpt4 key购买 nike

请告诉我如何为 v-for 制作唯一键例如,如果您使用索引作为键,那么最后一个元素将始终是动画的。具有相同文本的多个元素可以同时存在。我怎样才能实现这个Math.random 不太可能是解决问题的好方法我可以使用 Symbol 之类的东西作为唯一 ID

<!DOCTYPE html>
<header>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.js"></script>
</header>

<body>
<div id="message">
<transition-group name="msgAnimation" tag="div">
<div v-for="(msg, i) in messages" :key="i" class="wrapper">
<div class="wrapper__block" @click="messages.splice(i, 1)">
{{ msg }}
</div>
</div>
</transition-group>
</div>
</body>
<style>
#message {
display: flex;
flex-direction: column;
}

.msgAnimation-enter-active,
.msgAnimation-leave-active {
transition: opacity 1s;
}

.msgAnimation-enter,
.msgAnimation-leave-to {
opacity: 0;
}

.wrapper {
width: 100%;
height: 9vmin;
margin: 1vmin;
}

.wrapper__block {
background: green;
height: 100%;
width: 100%;
}
</style>
<script>
new Vue({
el: '#message',
data: {
messages: [
"hi",
"hi",
"123321",
"hi",
"32112332112sdfs",
"hi",
"qweewq",
"ashjdddsa",
"asdfddsa",
"asggghjddsa",
"ashddsa",
"asjghjddsa",
"asjddsa",
"asdddsa",
],
},
})
</script>

</html>

最佳答案

如果你只有字符串,你应该用对象包装每条消息。在您的案例中,使用 id 而不是索引更方便。

data: {
currentId: 0,
messages: [
"hi",
"hi",
"123321",
"hi",
]
},
created: function() {
this.messages = this.messages.map(function(message) {
return this.wrap(message)
})
},
methods: {
wrap: function(msg) { // make message object with unique (not random) id.
return {
id: ++this.currentId,
message: msg
}
},
addMessage: function(msg) {
this.messages.push(this.wrap(msg))
}
}

现在,每条新消息都有自己唯一的 id,因此按索引删除消息的问题应该消失了。

然后通过id键消息:

<div v-for="(msg, i) in messages" :key="msg.id" class="wrapper">
<div class="wrapper__block" @click="messages.splice(i, 1)">
{{ msg.message }}
</div>
</div>

关于vue.js - 如何为 v-for 创建唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67809464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com