antd中table组件出现数据重复并且对应的交互不起作用

原因:列表的key有重复,导致react没有重新渲染。解决:添加不同的key值

使用antd的select、treeSelect等表单组件时,若搜索框没有出现,需要给组件设置width值。

搜索功能是对于value值起作用,如果想要拿到name和code就需要拼接这两个值:

  1. // 设置:
  2. value={`${item.name}%-%${item.code}`}
  3. // 获取:
  4. name=value.split('%-%')[0],code=value.split('%-%')[1]

设置antd中message的位置(getContainer)

先销毁再配置,否则再次打开messageId在的父元素不生效

  1. message.destroy();
  2. message.config({
  3. getContainer: () => document.getElementById('messageId')
  4. });

antd中from表单

validateFields/validateFieldsAndScroll方法,可以传参数,详见antd官网
options可以进行相关的配置,如:force(对已经)

  1. const { form: { validateFields } } = this.props;
  2. validateFields((errors, values) => {});
  3. validateFields(['field1', 'field2'], (errors, values) => {});
  4. validateFields(['field1', 'field2'], options, (errors, values) => {});
  5. validateFields(options, (errors, values) => {});

antd中select组件

optionLabelProp:回填到选择框的 Option 的属性值,默认是 Option 的子元素。比如在子元素需要高亮效果时,此值可以设为 value。
children (combobox 模式下为 value)

antd中table组件

设置width,如果内容超过width,会出现width无效情况,
需要在antd样式加上

  1. .ant-table table {
  2. table-layout: fixed; // 列宽由表格宽度和列宽度设定。
  3. width: 100%; // 如果使用scroll需要设置100%覆盖掉width: auto
  4. }

打开弹窗/滑窗自动关闭tooltip提示,modalVisible是控制弹窗的字段

  1. <Tooltop
  2. title='提示信息'
  3. getPopupContainer={parent => parent}
  4. {...(this.state.modalVisible ? { visible: false } : {})}
  5. >
  6. 图标
  7. </Tooltop>

antd的drawer组件中使用多级滑窗问题

如果父级滑窗这只mask={false}的话,子滑窗和父滑窗不能共存(antd本身的bug)
解决:
(1)父滑窗仍要存在遮罩,不使用mask={false}来取消遮罩
(2)给父滑窗的遮罩ant-drawer-mask元素设置display:none
(3)虽然遮罩被隐藏了,但是遮罩下的内容仍然不能点击,所以要给父滑窗设置pointer-events:none,来使此元素的鼠标事件失效直接穿透到下面的元素
(4)因为整个滑窗的鼠标事件失效了,滑窗中的内容点不了,所以要给父滑窗中的ant-drawer-content-wrapper元素设置pointer-events:visible设置回默认值来使滑窗中的内容可点击

antd版本报错问题

Warning: React.createElement: type is invalid — expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it’s defined in, or you might have mixed up default and named imports.

原因:可能是antd版本不支持,antd版本过低导致的。
例如:
Input.Password 是在3.12.0版本才有,而安装的antd低于此版本就会报上述错误

antd中Select下拉项遗留现象

  • 问题描述

使用antd中Select时,下拉框Option数据改变时会出现遗留之前数据的情况

  • 原因

Option中的value属性有重复现象导致的,Option如果设置了value值,则设置的key值就会失效,会把value值当成key设置在dom上。
Select会默认对value值进行匹配,所以要保证各Option的value值唯一性。

  • 解决

Option设置唯一的value
在react中,可以设置key省略掉value
如果回填到select中的值有相同的情况,那就不能用value了,Option要是用自定义属性‘data-’,然后Select设置optionLabelProp=’data-‘来回填此属性。

  1. <Select optionLabelProp='data-tel'>
  2. <Option key="jack" data-tel="18888888888">Jack</Option>
  3. <Option key="lucy" data-tel="15555555555">Lucy</Option>
  4. <Option key="Yiminghe" data-tel="18888888888">yiminghe</Option>
  5. </Select>

antd 中 DatePicker 日期组件没有按照顺序回显

使用 RangePicker 时间范围选择框,设置 showTime=false 且 默认值 defaultValue=[time1, time2] 时,如果 time1 和 time2 的精确值不一致的话,切换月份并选择相邻的日期就会导致回显错误。
(1)代码:

  1. const { DatePicker } = antd;
  2. const { MonthPicker, RangePicker } = DatePicker;
  3. const time1 = moment('2020-05-21 16:49:12:123');
  4. const time2 = moment('2020-05-30');
  5. // time1精确到毫秒,time2精确到天
  6. console.log(time1.valueOf()); // 1590050952123
  7. console.log(time2.valueOf()); // 1590768000000
  8. ReactDOM.render(<RangePicker defaultValue={[time1, time2]} />, mountNode);

(2)回显错误如图:

  1. 开始日期向前切换月份,然后在结束日期中选择相邻日期;
  2. 我选的是13-14,应该把13回显到开始日期上,14回显到结束日期上;
  3. 结果却会把14回显到开始日期,结束日期没有值;

RangePicker.gif
(3)解决办法:默认值的开始和结束日期的精确度要保持一致,都精确到天或者毫秒。

antd 中 Form.Item 的 valuePropName 属性

子节点的值的属性,如 Switch 的是 ‘checked’。

  1. <Form.Item name="testChecked" valuePropName="checked">
  2. <Checkbox>测试</Checkbox>
  3. </Form.Item>

因为 Checkbox的绑定数据属性不是value而是checked,所以valuePropName要设为checked,否则form.validateFields()获取不到testChecked的值。

antd Table 中表头不换行

  1. white-space: nowrap;

antd Form 报错:Instance created by useForm is not connected to any Form element. Forget to pass form prop?

原因:这是因为你在调用 form 方法时,Modal 还未初始化导致 form 没有关联任何 Form 组件。
修改方法:通过给 Modal 设置 forceRender 将其预渲染。
antd 注意事项 & 问题报错 - 图2

antd Tree 组件报错: does not exist in the tree

原因:设置选中的 key 时,树还没渲染完。
解决:先加载树,然后再设置选中的key。