问题背景
在使用 class 编写组件时,有时会发生变量响应式丢失问题。我在使用 ant-design-vue 中的 a-tree 时,遇到过这样一个问题,在自定义 tree node时,在每个 node 中都加入了一个 a-checkbox,但是当我点击 checkbox 时,checkbox 并没有发生选中或者取消选中,就像完全没有点击他一样。当时该变量是属于 Array 这样一个结构,当时排查了许久,想过是其它冒泡到其它方法上导致绑定在 checkbox 上的变量更改为true后又更改为false的原因,但最后发现是响应式缺失了,也就是 ts 中的变量已经发生了变化,但是 html 中的变量并没有更新。通过 console.log 打印出来的数据结构,只有最外层的对象是 Proxy 对象,而内部的变量都不是 Proxy 对象。
解决办法
使用 ... 解构数组,可使内部变量都变为 Proxy 对象,恢复响应式。
this.arr = [...this.arr];