你不知道的antd

1,744 阅读3分钟


最近开始使用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。