接收一条聊天信息时,等到消息接收完后,需要显示👍和👎图标。
关键来啦👍的逻辑一开始是这样写的
handlePraise (val, index) {
const type = val.praise === '1' ? '0' : '1'
this.$set(this.answerArr[index], 'praise', type)
this.$set(this.answerArr[index], 'dislike', '0')
},
在执行这段代码的时候,我是拿得到answerArr这个数据的,但是点击👍渲染到页面上很慢很慢。 但是,点击左边的聊天记录然后出现出现聊天框,点击切换效果又很流畅。
于是换了一种写法
handlePraise (val, index) {
const currentAnswer = { ...this.answerArr[index] } // 创建副本
currentAnswer.praise = currentAnswer.praise === '1' ? '2' : '1' // 切换状态
currentAnswer.dislike = '2' // 确保点踩状态为未点赞
this.$set(this.answerArr, index, currentAnswer) // 更新状态
},
果然这样写就没问题了
注意事项:
- 在 Vue 中,当你直接修改对象的属性时,如果该属性没有在 Vue 的响应式系统中被跟踪,那么 Vue 可能不会自动更新视图。使用
$set方法可以确保 Vue 能够正确地响应属性的变化。 - 创建副本可以避免修改原始数据,但在某些情况下可能会导致性能问题,尤其是在处理大量数据或频繁更新时。