2023.10.9表单 组件 数值边界的坑记录

A. 关于getFieldDecorator劫持value

写SingleCurrencySelect的时候,遇到value不一致的情况。当时写的很呆瓜,一直内外value混用,加上类组件极其先进的state与props,我犯了糊涂。

这里一定要给getFieldDecorator自由!(PS:刚刚又看了下官网文档,也可以自定义校验,v3文档搜索[自行处理表单数据](https://3x.ant.design/components/form-cn/#components-form-demo-without-form-create)即可)

value取props中的,onChange是子组件传回表单的方法。具体的可以看C项,关于数值的改变。

B. 关于初始化表单

setFieldsValue这个函数使用的时候,千万要当心是初始化新增、关闭弹窗时,空数值的传递,一定每项都要手动补全。

setFieldsValue({...initValue})会出现解析空对象,因而表单数据没有更新的问题。

C. 关于数值的改变 onChange

有两个自定义组件用的我机器难受。当时月份用了之前参考的Period.Single,结果在getFieldDecorator包裹下,这个组件表现得十分抽象。😅(是的,我承认之所以要把手写稿打出来的很大一部分原因,是想看到这个流汗的emoji🐕)

最后还是用了Antd的MonthPicker,注意区间要取【会计区间】,这个值我是直接从接口获取的,nuomi给的是个undefined。

第二个组件就是那个说能【直接用】的CurrencySelect了。😅组件多选+那个很抽象的默认,在notMultiple的情况下,产生了不可描述的Bug,我直接另起炉灶搞了个SingleCurrencySelect。

期间Select这组件,我使用的也有些昏头转向,看官方文档之后,才惊觉之前在BI里用的所谓InputText的思路实际上走窄了。

Select组件最核心的就是四个大字——键值匹配!

一定要清晰地把握数据流向。我传给Select.Option的是什么,key是什么,在总的Select里的关键值是什么。在数据改变后,传给onChange的是什么,我是否要传递出去,给了外面的父组件什么值。

总结就是,

C.A 理解组件的通用步骤

Q1. 进来了什么

Q2. 怎么组装成搜索项

Q3. 变了什么

Q4. 传出去什么

这个思路对于任何组件都适用,在陌生复杂的组件中理清数据流向很重要。

D. Number()强制转换数字函数的局限

请记住__数字必然存在位数限制__。计算机的容量不是无穷大的。

在我传递数值的时候,我发现currencyId(大概十一位)一直不变,虽然我多次更换币种。这里C的问题又出来了,我没有理清楚思路,在数据流向上console.log了很久,感觉没错了才Debug,其实正是最后一步Number强制转换到了数字的边界,所以都是以60结尾的峰顶数值。

关于浮点数 可参考 https://zhuanlan.zhihu.com/p/479141426

posted @ 2023-10-09 23:07  乐盘游  阅读(14)  评论(0)    收藏  举报