实习日记5(一个对象函数bug带给我的反思)

62 阅读2分钟

今天线上写的代码出了一个bug,需要紧急修复,mt教我如何优雅解决!! 背景是一个开关组件和一个选择组件组成一个表单,但是现在发现,当选择组件为空的时候改变开关组件,失效了!

排查了一下发现了问题,因为这个表单组件里面的值是通过父级组件传过来的,之前改动了一下其他功能,因为统一出口的原因,所以影响到了这个组件,因为之前只有一个选择组件,所以值只依赖这个对象的这个属性,但是现在新增了一个开关属性,就不能只依赖一个属性而应该是一个对象! 原本的代码:

...
let init;
if(o.a){
    init={
    a:o.a
    b:o.b
    }
}else if(k.a){
    init={
    a:k.a
    b:o.b
    }
}
return init

...

我了解问题所在之后改的代码:

...
let init;
if(o){
    init={
    a:o.a
    b:o.b
    }
}else if(k){
    init={
    a:k.a
    b:o.b
    }
}
return init

...

只能说,这个代码只解决了表面问题,并没有让我有什么深刻的反思,还是mt看到我的代码和我说了几句我才觉得有点恍然大悟然后立刻把它记录下来,作为我这个小白之旅的一段坑:

首先,这个b作为一个公用逻辑可以提取出来,其次,这样修改其实相当于修改了原本逻辑,可以用更好的方式来解决,顺便一提,这个函数没有兜底方案,于是一段优化后的代码就产生了:

 ...
let init={
a:'',
b:o.b
};
if(o.a){
    init.a=o.a
   
}else if(k.a){
    init.a=k.a
}
return init

...

这段代码在那个场景下的妙处真的是让我恍然大悟,我开始反省,自己一直追求一些宏图,可是连小小的基底都能写的一塌糊涂,又怎么能写好大的项目呢?联系到最近看到的一个评论,说最近招到的前端质量越来越低,是不是也是因为ai时代的到来而没有好好打基础呢?