接收数据后,频繁交互的页面渲染很慢的问题

91 阅读1分钟

接收一条聊天信息时,等到消息接收完后,需要显示👍和👎图标。

关键来啦👍的逻辑一开始是这样写的

    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 能够正确地响应属性的变化。
  • 创建副本可以避免修改原始数据,但在某些情况下可能会导致性能问题,尤其是在处理大量数据或频繁更新时。