等号引发数组被清空的bug
最后更新于
最后更新于
大家看这个新增按钮哈
每次点击都会添加一个新的模拟数据
这个没有问题
但是他现在用了一行折中的代码 (方案)
来实现这效果
就是这行代码
原来啊他是这么写的
但这么写不行
所以群里有小伙伴让他试一下这样写
这样写就可以
给大家看一下
原来这样写会有什么效果哈
刷新,大家看新增,注意看!没了~
每次点新增这个数据就没了
然后呢他也之前在这加过 log
我们在这打印一下看一下
刷新一下
打开啊
这里明明是
但是呢我展开呢他就变成0了
那关于这个问题之前我也分享过
大家如果没刷到呢
可以回去补补课哈
那我们就直接去找在这个 log 之后
哪还修改了这个变量对吧
正常来说这是个点击事件
后边就没有代码了
就很奇怪
那我们先不管他
全文(口误,当前文件)搜一下
大家看这没问题
这也没问题
没问题
这也没问题
created的
这块应该也没有问题
因为他就只是创建完之后执行一遍
对吧我们继续找
大家看这有个 watch
他在监听这个
值的变化
开始看到这
我就隐约觉得这块可能会有问题
我们先来验证一下
把它整个注掉
我们再来试一下
大家看,就可以了
展开里边也有值了
所以我们就可以推断出来
问题就在这里边
我们再来找
这里边就是一个 if 一个return
我们把这个
下面这行赋值给它注掉再来试一下
大家看 还是不行
说明导致这个问题不是这行代码
那就奇怪了难道这 if 有问题吗
我们把这个 if 再去掉
我们再来试一下
哎可以了
说明就是这if
这就很奇怪
难道一个if会有什么影响吗
我把这个return再注掉再试一下
大家看return注掉也不行
还是有问题说明就是这个if导致的
后来我仔细一看发现原来这里啊
他不是一个比较
他是一个负值
大家看 就缺了一个等号
如果一个等号呢
相当于他把 oldVal 清空了对吧
那
oldVal 清空相当于 val 就清空了
大家别忘了
因为他这个是
添加元素触发的这个 watch
说明他这个val和oldVal
都是同一个数组
那你清空oldVal
相当于val就被清空了对吧
所以呢如果我们不考虑这个监听
存在是否合理的情况下
解决这个问题其实很简单
就是在这加一个等号
就可以了
我们来试一下
大家看,这就解决了