最近开始使用Ant Design of React,感受有2点:
拿来主义开箱即用真棒,同时看到了那个及其渺小的自己;
有些api讲的不够清晰,需要使用者自己去发掘探寻用法,尤其遇到开发阻塞的时候会抓耳挠腮。
在此记录自己遇到的问题及解决方案【基于"antd": "2.13.11"】。
2019-12-25手记
Form表单
输入缓存问题:
输入框会缓存之前输入的内容,尤其对长表单不友好,缓存的下拉框会影响其他输入框的正常使用,交互体验差。

解决方案:
Form标签中添加 autoComplete='off';

下拉框默认选项样式问题:
下拉框数据,接口只返回姓名,导致选择后不能置空,需要在下拉框中加入一个置空的选项。(此问题,接口或前端均可解决)。我的解决方案:手动unshift一条数据{id:‘’,name:'- 请选择-'}到下拉框中。
此时有个新的问题,当下方的表单时一个编辑、修改功能的表单时,需要回显数据,就会出现战队队长没有数据的时候,传入option的id是‘’刚好与第一项匹配,此时选中了第一项,虽然下拉框的文案与默认文案一致还是‘- 请选择 -’,但是样式变成了黑色。
怎样让没有数据的时候,回显的是默认文案,而不是第一个选项?

解决方案:

当使用的是getFieldDecorator包装的时候,initialValue属性需要封装一下,当有回显值的时候传initialValue属性,没有默认值的时候不传initialValue属性。

当使用mapPropsToFields更新表单数据时,对应的下拉框数据传空对象,不能传value属性。
如图:我圈出的4条数据,都是下拉框,按图中处理逻辑即可。
带输入框的联动拾色器如何实现
功能逻辑:
点击左侧色块,显示拾色器,拾色器选中的新色值会回显到色块中;
点击右侧输入框,显示拾色器,拾色器选中的新色值会回显到输入框中;
改变输入框中的色值,左侧色块与拾色器的颜色跟着改变。

方案1:
2个并列的输入框用inputGroup可以完美实现,但是getFieldDecorator无法将值传入其中一个input,提交表单的时候也无法获取任一input的value。方案pass
方案2:
使用2个formitem,分别包装input-color(调取系统自带拾色器)和input-text;通过css实现图中的样式。使用2个state控制颜色的更新,即可保证联动不出bug。但是会出现一个交互体验问题,苹果自带的拾色器必须手动关闭,否则会一直在桌面上最顶层。而windows要关闭弹框,必须先关闭拾色器,因此不会有这个问题。
方案3:
方案2已实现需求,要优化方案2的交互,需要避免使用系统自带的功能。
使用拾色器插件:react-color。插件使用比较流畅,可解决使用系统自带拾色器的兼容问题或体验问题。提供了多种样式及API。