vue的computed不能监听数组的变化?

<template>
  <div>
    <input
      type="text"
      v-model="birthday"
    />
  </div>
</template>
<script>
export default {
  data() {
    return {
      date: ["y", "y", "年", "m", "m", "月", "d", "d", "日"]
    };
  },
  computed: {
    birthday: {
      get() {
        return this.date.join("");
      },
      set() {
        this.date[1] = event.data;
        console.log(this.date)
      }
    }
  }
};
</script>

sf找到一个类似的提问,但是没有答案。
请问在input中输入新值的时候,date已经改变,为什么input的值不更新?computed不能监听数组吗?


恕我文档没有看全。“由于 JavaScript 的限制,Vue 不能检测数组和对象的变化”。答案是:

set() {
    // this.date[1] = event.data;
    this.$set(this.date, 1, event.data)
    console.log(this.date)
}
阅读 13k
4 个回答

this.$set(this.date, 1, event.data)

他是一个计算属性 是存在缓存的 当数据变化的时候 去做计算处理 但是并非适合监听数据使用

Vue不能通过索引改变数组的元素,然后希望他是响应式的。因为Vue并没有对数组中的每个元素都进行响应式处理,源码中加了判断,碰到数组单独走自己的逻辑,这是因为数组的操作比较频繁,让数组元素响应式的话开发体验与性能不成正比。使用数组的变异方法吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题