关于一个折磨了我快两天的不是bug的bug(低血压人士误入)

关于一个折磨了我快两天的不是bug的bug(低血压人士误入)
Kitholt Frank关于一个折磨了我快两天的不是bug的bug(低血压人士误入)
这是我在做一个todolist的时候遇到的…话不多说,上图
上面的代码的逻辑很简单,在输入框输入待办的任务task,由于双向绑定,将获得的task封装成一个taskObj对象(一条待办事项),然后通过触发自定义事件addTodo将这个taskObj对象传给父组件
之后由父组件向store提交commit…
以此来执行mutation里的ADDTODO方法,将新的待办事项插入到todolist中
嗯!一切看着都十分顺利,但是…
明明插入俩个不一样的待办事项并且他们的id是通过nanoid随机生成的,新的数据会覆盖掉之前插入的数据…对没错,女士们先生们就这个错误折磨我快两天(再次点题),我这两天心情极度低落,这只是一个简单的小demo却给我写成了这样。我一度怀疑我是不是白学了,我是不是应该注意进厂时机(说真的,我没有开玩笑)傅杰豪,你连这样一个错误都找不出来,你学伱抹的js、vue我把代码从头到尾看了不下十遍,一遍又一遍地调试,也是一点效果也没有…在床上无数次躺下,又坐起。当时我真的很想跳过这个demo,但是这个demo太重要了,它虽然小却“五脏俱全”,它涉及了vue的许多使用技巧,比如路由router、vuex、父子组件之间的数据传递等等。如果我跳过了,我后面怎么办?不是项目的demo就开始逃避不去攻克…光凭视频看的和那点自欺欺人的笔记就认为自己已经学了很多了?
就在刚刚这个问题被解决了。我一开始总以为是vue的问题(版本问题?新版本bug?store的问题?)。我从未考虑关于js那些最基本的问题,仔细看看第一张截图,我在蓝色方框里定义了一个封装task的对象taskObj,是定义在commit方法之外的。这就意味着每次调用commit方法,我都会使用这一个对象,而且是反复使用(相当于一个全局变量)。因此…
1 | //插入第一条task,它的唯一id |
第二次的id会覆盖掉第一次的id,甚至其他属性…
解决方法就是
将这个第一张截图中的蓝色区域框的代码移到绿色框里,另外taskObj只是单纯用来封装task,因此不需要设置成响应式数据(我刚刚发现我这样写也不对…),直接改成普通对象就好了…








