实际项目开发中遇到的BUG解决方案(一)?

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

最近项目开发中遇到的一些bug和解决方案,希望能给读者带来一些启发,分摊大家解决Bug的时间

Bug:浏览按钮下拉框数据出现id_name样式的回显

下拉框后端要id和name的拼接数据,没办法,那就在<Select.Option> 内通过value={{item?.id}_{item?.name}} 拼接,提交数据的时候在将两个字段 split('_')[1], 拆开分别赋值,能成功提交。但在回显的时候,出现上述bug,

解决过程

  • 在Ant中 initialValue: 设置了拼接格式,取消后,无效
  • 想到可能是渲染冲突,在 useEffect 里添加延迟函数,无效
  • 手动更新:在官方API里设置 setFieldsValue ,更改表单数据方法里,将回显字段拼接成id_name格式,无效
  • 在选择的时候会触发诸如 onFocus,onChange,onSearch 的事件,那在手动设置回显函数会有延迟(选中在脱离光标同类的就全部显示正常),由此推断,少了一层事件触发函数,最后再useEffect 中调用 onChange的事件即可,解决

Bug:Moment格式化时间与Ant时间选择框类型不匹配造成的渲染错误

提交的时候,后端要的是年月日时分的字符串形式,默认的moment().format() 取到的时间格式为:"2022-07-26T01:56:28.292Z" , 设置format('YYYY-MM-DD HH:mm') 格式要求即可,OK,提交没问题。

解决过程

但在回显的时候,犯难了,按后端返回的字符串格式放在时间选择器上根本匹配不上,在这方面做了很多无效格式转化,最后想到:数据我是从moment转的,按理也应该用moment转回去 moment(pre.limitDateTime, 'YYYY-MM-DD hh:mm'),在回显的时候记得考虑为空的情况, 解决


Bug:下拉框按钮没有值显示null

明明在交前对着item项做了非空的兜底处理,理想状态显示空,并且出现 placeholder=”请选择” 。

A: Id && Name ? `${Id}_${Name}` : null,

但实际情况确是:

image.png

解决过程

很好理解嘛,初次加载回显的时候每值又做了兜底处理,提交又是拼接字符串,出现这个很正常。

OK,那我兜底处理改为 " " 总行吧,于是就有了:

image.png

这种情况。

当时没觉得有啥不对,直到测试给我提了个缺陷,提示文案呢?

对啊,我占位符呢,placeholder=”请选择”哪去了?接着一顿百度。发现兜底的改为 undefined ,解决。至于为啥,大概是Ant 选择器会将 " " 或 null 当做是有值吧。


Bug:提交流程能走通,在放在最后的message没提示

在提交接口处,有多个函数调用,用以处理当前页面数据,最后能提交并回显成功,但没有message弹框。

interface(params)
    .then((res)=>{
    resolve(res)
    A()
    B()
    message.success('xxx')
    })

初步分析:没走到最后,一定是其中某个函数报错了,于是就在方法前面逐一打印message弹窗,发现在一个处理文件的函数终止了。OK,源头找到!

解决过程

然后对这文件处理函数一顿分析,发现大问题。

  1. 函数开头对触发条件做了判断(没传文件是undefined,初次进来,上传但没提交又删除是 [ ] 数组),这两种情况退出返回 false,不调用发送文件接口。乍一看逻辑好像没啥问题,但如果是后续进来,然后删掉了以前的文件,在提交,这种情况理应调用文件保存接口的,但给开头判断直接退出了!这里在多加层判断:比对回显的文件和上传的文件,一致不调用上传接口。

  2. 文件上传完,问题来到显示上传文件这。在Ant的Upload 上传组件中,明确了在beforeUpload 阶段,返回false则停止上传文件,但通过查看接口,发现还是上传成功那个了,这就很奇怪。在onChange 阶段打印state状态,发现之前进写上传接口的判断条件居然是 info.file.status === "done" ,那就忽略了之前有文件,现在上传失败没有state属性的情况,导致状态还为done 的错误情况。疏忽了。。。,这里用Switch做了个状态的判断,多考虑了几种情况。

  3. 修改完上述两处错误后,信心慢慢的提交,不出意外,还是报错了。在将数据添加到提交后台的接口字段上,采用的书对象数组形式。直接遍历当前字段的各种属性,然后push到要提交的数组里,没想到当前数组为空的情况,导致控制台报了个 data.xxx is no undefind 的错误。又又又疏忽了,没考虑到啥都没有空数组的情况下是没这属性的,加个 ?. 属性解决!

    这一波三折,折又折的改Bug之旅,暂且结束了,这也让我意识到:编码过程中条件考虑不充分带来的后果,太可怕了,编码半小时,改bug一下午???,怎样才能把条件考虑周全呢?唯有多试!


持续更新中…

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY55YfOY' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片