Skip to content

Ant Design Skills&Tips

EricYang edited this page Apr 22, 2021 · 22 revisions

重点记录一些antd组件库使用时遇到的问题以及解决方法

Form组件

使用

  • labelCol: { span: 6 },大小;
  • wrapperCol: { span: 16 };

校验

  • const [form] = Form.useForm();此时会报错:Warning: Instance created by useForm is not connected to any Form element. Forget to pass form

  • prop?官方没给出合理的处理方式;

  • 有form属性,设为上面的{form}, 可以通过form.validateFields().then()去校验整个Form表单的字段;
  • scrollToFirstError:长表单校验自动滚动;

  • form.getFieldsValue();获取表单各项的值;

  • form.setFieldsValue();设置表单区域的值;

  • form.resetFields();重置表单的值;// 可能会导致bug,例如:menuItem中有个delete icon,点击该icon弹出modal+form,此时form中显示menuItem的值,关闭modal,再次点击delete icon,modal中的form变成了空;

  • onValuesChange:表单数据变化监听事件;

  • <Form.Item> 设置rule进行单项校验:required、max、validateTrigger:['onChange', 'onBlur','onFocus']、validator:customFunc自定义校验方法;

  • 对于customFunc自定义校验方法:能接收到rule、value、callback,通过判断value,然后返回Promise.resolve()/Promise.reject('提示内容');

Modal组件

使用

  • getContainer={Boolean | HTMLElement}:默认挂载到document.body;
  • forceRender:强制刷新;
  • destroyOnClose:关闭的时候销毁组件;
  • maskClosable={false}:点击蒙层是否关闭;

AutoComplete、Select组件

使用

  • getPopupContainer={(triggerNode) => triggerNode.parentNode}:挂载到DOM,防止options列表滑动;
  • dropdownRender:渲染自定义ReactNode;
  • onSelect={this.onSelect}
  • onSearch={this.onSearch}
  • dataSource:数据;
  • 阻止冒泡:Option的点击事件e中会抛出,e.stopPropagation();e.preventDefault();return false;三连看情况;

Upload

使用

  • customRequest={this.upload}:自定义上传方法;upload(option):option包含文件信息:option.file.type、option.file.name...可以进行文件校验;

Table

使用

  • scroll={{x: 1200,y: 500, scrollToFirstRowOnChange: true,}}:设置表格滚动;
  • pagination:分页:
  • expandable={{ defaultExpandedRowKeys: ['row1', 'row3'] }}:某行是否默认展开;
  • dataSource:数据;
  • columns:列头;
{
  size: 'small',
  total: data.total,
  showQuickJumper: true,
  defaultCurrent: 1,
  current: state.pageNow,
  pageSize: 50,
  showTotal: total => '每页50条 共${total}条',
  onChange: page => onPageSizeChange(page),
}
  • locale:{{emptyText: }}:自定义空内容;
  • loading={{spinning: loading, tip: "加载中...",}}:加载loading;
  • columns:表格列配置:
{
      title: 'columnName',
      dataIndex: 'columnData',
      key: 'column',
      align: 'right',
      width: 120,
      render: text => handleVal(text),// 处理文本
      sorter: (a, b) => a.columnData - b.columnData,// 排序
}

Menu组件

使用

<Menu
  onSelect={handleMenuClick} // 选中事件
  onClick={..} // 点击事件
  onOpenChange={onOpenChange} // submenu展开事件
  style={{ width: 255 }} // 宽
  // defaultOpenKeys={['sub1']} // 默认展开的submenu
  openKeys={selectedSubMenu} // 当前选中的submenu
  // defaultSelectedKeys={['key1']} // 默认选中的menuItem
  mode="inline" // 展示形态
  >
    {renderSubMenu(menuList)} // 自定义方法去渲染
</Menu>

Clone this wiki locally