关键的点

  • 里面嵌套
  • 并且把 label放在外层的
  • 一个 Form.Item内不能有两个 getDecorators

image.png
一个 Form.Item 建议只放一个被 getFieldDecorator 装饰过的 child,
当有多个被装饰过的 child 时,help,required,validateStatus 无法自动生成

form4x

form3x

  1. export const itemLayout = {
  2. labelCol: { span: 4 },
  3. wrapperCol: { span: 20 },
  4. };
  5. const { Item } = Form;
  6. <Form {...itemLayout}>
  7. <Item label='新增链接'>
  8. <div className='flex'>
  9. <Item className='mb0 flex1'>
  10. {getFieldDecorator('link', {
  11. initialValue: value.link,
  12. })(<Input placeholder='请输入链接名称' />)}
  13. </Item>
  14. <Item className='mb0 ml8 flex1'>
  15. {getFieldDecorator('url', {
  16. initialValue: value.url,
  17. rules: [{required: true, type: 'url', message: '请输入url'}],
  18. })(<Input placeholder='请输入链接地址' />)}
  19. </Item>
  20. </div>
  21. </Item>
  22. </Form>

antd提供了validateStatus,help,hasFeedback 等属性,
你可以不需要使用 Form.create 和 getFieldDecorator,自己定义校验的时机和内容。

  • validateStatus: 校验状态,可选 ‘success’, ‘warning’, ‘error’, ‘validating’。
  • hasFeedback:用于给输入框添加反馈图标。
  • help:设置校验文案。

错误的写法

  1. <Form.Item label="准确度">
  2. {getFieldDecorator("min", {})(<Input placeholder="最小值" />)}
  3. ~
  4. {getFieldDecorator("max", {})(<Input placeholder="最大值" />)}
  5. </Form.Item>

type=’hidden’ 隐藏表单

https://github.com/ant-design/ant-design/issues/19784

  1. <Form.Item name="id">
  2. <Input type="hidden" />
  3. </Form.Item>