携手创作,共同成长!这是我参与「掘金日新计划 · 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,
但实际情况确是:
解决过程
很好理解嘛,初次加载回显的时候每值又做了兜底处理,提交又是拼接字符串,出现这个很正常。
OK,那我兜底处理改为 " "
总行吧,于是就有了:
这种情况。
当时没觉得有啥不对,直到测试给我提了个缺陷,提示文案呢?
对啊,我占位符呢,placeholder=”请选择”哪去了?接着一顿百度。发现兜底的改为 undefined
,解决。至于为啥,大概是Ant 选择器会将 " " 或 null
当做是有值吧。
Bug:提交流程能走通,在放在最后的message没提示
在提交接口处,有多个函数调用,用以处理当前页面数据,最后能提交并回显成功,但没有message弹框。
interface(params)
.then((res)=>{
resolve(res)
A()
B()
message.success('xxx')
})
初步分析:没走到最后,一定是其中某个函数报错了,于是就在方法前面逐一打印message弹窗,发现在一个处理文件的函数终止了。OK,源头找到!
解决过程
然后对这文件处理函数一顿分析,发现大问题。
-
函数开头对触发条件做了判断(没传文件是undefined,初次进来,上传但没提交又删除是 [ ] 数组),这两种情况退出返回 false,不调用发送文件接口。乍一看逻辑好像没啥问题,但如果是后续进来,然后删掉了以前的文件,在提交,这种情况理应调用文件保存接口的,但给开头判断直接退出了!这里在多加层判断:比对回显的文件和上传的文件,一致不调用上传接口。
-
文件上传完,问题来到显示上传文件这。在Ant的
Upload
上传组件中,明确了在beforeUpload
阶段,返回false则停止上传文件,但通过查看接口,发现还是上传成功那个了,这就很奇怪。在onChange
阶段打印state状态,发现之前进写上传接口的判断条件居然是info.file.status === "done"
,那就忽略了之前有文件,现在上传失败没有state属性的情况,导致状态还为done
的错误情况。疏忽了。。。,这里用Switch做了个状态的判断,多考虑了几种情况。 -
修改完上述两处错误后,信心慢慢的提交,不出意外,还是报错了。在将数据添加到提交后台的接口字段上,采用的书对象数组形式。直接遍历当前字段的各种属性,然后push到要提交的数组里,没想到当前数组为空的情况,导致控制台报了个
data.xxx is no undefind
的错误。又又又疏忽了,没考虑到啥都没有空数组的情况下是没这属性的,加个?.
属性解决!这一波三折,折又折的改Bug之旅,暂且结束了,这也让我意识到:编码过程中条件考虑不充分带来的后果,太可怕了,编码半小时,改bug一下午???,怎样才能把条件考虑周全呢?唯有多试!
持续更新中…