表单组件。
表单布局、校验、数据提交操作时用到。 组件的设计思想可以看这篇文章 https://zhuanlan.zhihu.com/p/56280821
nodeName 作为 name、idsize=medium, 并且会控制 FormItem 内所有组件的size。 如果想修改组件的size <FormItem size="small" ><p> 标签)或者组件向上偏离,可以通过 className="next-form-text-align" 辅助调整<FormItem>直接包裹的组件才能展示校验错误提示。如果界面不展示错误信息,请检查是否有多个层级。 比如 <FormItem><div><Input/></div></FormItem> 是无法展示校验信息的。<Form field={false}> 来关闭数据获取,变成一个纯布局组件Field 组件文档的 rules如果您的表单场景非常复杂,比如动态渲染,大量字段,复杂数据结构,复杂联动校验,可以考虑使用 formily,formily已经封装了所有fusion组件,保证您开箱即用
size 会强制设置 FormItem 下的所有组件的size
labelAlign label方位(如果不设置 labelCol 和 wrapperCol 那么默认是标签在上)
labelTextAlign 文字左右对齐方式
为 <FormItem> 定义 state 属性控制三种校验状态。
如果是 <Input> 组件, 可在<FormItem>上面添加 hasFeedback 控制图标的展示
注意: 反馈图标只对 <Input /> 有效。
| 参数 | 说明 | 类型 | 默认值 | 是否必填 | 支持版本 |
|---|---|---|---|---|---|
| inline | 内联表单 | boolean | - | - | |
| size | 单个 Item 的 size 自定义,优先级高于 Form 的 size, 并且当组件与 Item 一起使用时,组件自身设置 size 属性无效。 | 'large' | 'medium' | 'small' | medium | - | |
| fullWidth | 单个 Item 中表单类组件宽度是否是 100% | boolean | - | - | |
| labelAlign | 标签的位置,如果不设置 labelCol 和 wrapperCol 那么默认是标签在上 | 'top' | 'left' | 'inset' | left | - | |
| labelTextAlign | 标签的左右对齐方式 | 'left' | 'right' | - | - | |
| field | field 实例,传 false 会禁用 field | false | NextField | null | - | - | |
| saveField | 保存 Form 自动生成的 field 对象 | (field?: NextField | null) => void | func.noop | - | |
| labelCol | 控制第一级 Item 的 labelCol | ColProps | - | - | |
| wrapperCol | 控制第一级 Item 的 wrapperCol | ColProps | - | - | |
| onSubmit | form 内有 htmlType="submit" 的元素的时候会触发 |
FormEventHandler<HTMLFormElement> | function preventDefault(e) { e.preventDefault(); } | - | |
| children | 子元素 | ReactNode | - | - | |
| value | 表单数值 | FieldValues | - | - | |
| onChange | 表单变化回调 签名: 参数: values: 表单数值 item: 表单项,item.name:发生变化的组件的名称,item.value:变化的组件的新数据,item.field:与变化的组件关联的 field 实例 |
( values: FieldValues | undefined, item: { name: string; value: string; field: NextField | null } ) => void |
func.noop | - | |
| component | 设置标签类型 | ElementType | 'form' | - | |
| fieldOptions | field 配置项,在 Form 初始化 field 实例时会用到 | FieldOption | - | - | |
| device | 预设屏幕宽度 | 'desktop' | 'phone' | 'tablet' | 'desktop' | - | |
| responsive | 是否开启内置的响应式布局(使用 ResponsiveGrid) | boolean | - | 1.19 | |
| isPreview | 是否开启预览态 | boolean | - | 1.19 | |
| useLabelForErrorMessage | 是否使用 label 替换校验信息的 name 字段 | boolean | - | 1.20 | |
| preferMarginToDisplayHelp | 倾向使用 item 的 margin 空间来展示 help | boolean | false | 1.26.37 | |
| colon | 表示是否显示 label 后面的冒号 | boolean | false | 1.22 | |
| disabled | 是否禁用 | boolean | false | - |
手动传递了 wrapCol labelCol 会使用 Grid 辅助布局; labelAlign='top' 会强制禁用 Grid
| 参数 | 说明 | 类型 | 默认值 | 是否必填 | 支持版本 |
|---|---|---|---|---|---|
| labelCol | label 标签布局,同 <Col> 组件,设置 span offset 值,如 {span: 8, offset: 16},该项仅在垂直表单有效 |
ColProps | - | - | |
| wrapperCol | 需要为输入控件设置布局样式时,使用该属性,用法同 labelCol | ColProps | - | - | |
| help | 自定义提示信息,如不设置,则会根据校验规则自动生成。 | ReactNode | - | - | |
| name | 字段名,默认赋值给第一个子元素 | string | - | - | |
| extra | 额外的提示信息,和 help 类似,当需要错误信息和提示文案同时出现时,可以使用这个。位于错误信息后面 | ReactNode | - | - | |
| validateState | 校验状态,如不设置,则会根据校验规则自动生成 | 'error' | 'success' | 'loading' | 'warning' | - | - | |
| hasFeedback | 配合 validateState 属性使用,是否展示 success/loading 的校验状态图标,目前只有 Input 支持 | boolean | false | - | |
| children | node 或者 function(values) | ReactNode | ((values: FieldValues) => void) | - | - | |
| fullWidth | 单个 Item 中表单类组件宽度是否是 100% | boolean | - | - | |
| labelAlign | 标签的位置,如果不设置 labelCol 和 wrapperCol 那么默认是标签在上 | 'top' | 'left' | 'inset' | - | - | |
| labelTextAlign | 标签的左右对齐方式 | 'left' | 'right' | - | - | |
| required | [表单校验] 不能为空 | boolean | - | - | |
| asterisk | required 的星号是否显示 | boolean | - | - | |
| requiredMessage | required 自定义错误信息 | string | - | - | |
| requiredTrigger | required 自定义触发方式,默认值 onChange, 原生事件均可使用 onChange/onBlur/onFocus/... | string | Array<string> | - | - | |
| min | [表单校验] 最小值 | number | - | - | |
| max | [表单校验] 最大值 | number | - | - | |
| minmaxMessage | min/max 自定义错误信息 | string | - | - | |
| minmaxTrigger | min/max 自定义触发方式 | string | Array<string> | - | - | |
| minLength | [表单校验] 字符串最小长度 / 数组最小个数 | number | - | - | |
| maxLength | [表单校验] 字符串最大长度 / 数组最大个数 | number | - | - | |
| minmaxLengthMessage | minLength/maxLength 自定义错误信息 | string | - | - | |
| minmaxLengthTrigger | minLength/maxLength 自定义触发方式 | string | Array<string> | - | - | |
| length | [表单校验] 字符串精确长度 / 数组精确个数 | number | - | - | |
| lengthMessage | length 自定义错误信息 | string | - | - | |
| lengthTrigger | length 自定义触发方式 | string | Array<string> | - | - | |
| pattern | 正则校验 | unknown | - | - | |
| patternMessage | pattern 自定义错误信息 | string | - | - | |
| patternTrigger | pattern 校验何时触发,默认值 onChange, 原生事件均可使用 onChange/onBlur/onFocus/... | string | Array<string> | - | - | |
| format | [表单校验] 四种常用的 pattern | 'number' | 'email' | 'url' | 'tel' | - | - | |
| formatMessage | format 自定义错误信息 | string | - | - | |
| formatTrigger | format 校验何时触发,默认值 onChange, 原生事件均可使用 onChange/onBlur/onFocus/... | string | Array<string> | - | - | |
| validator | [表单校验] 自定义校验函数 | Validator | - | - | |
| validatorTrigger | validator 自定义触发方式,默认值 onChange, 原生事件均可使用 onChange/onBlur/onFocus/... | string | Array<string> | - | - | |
| autoValidate | 是否修改数据时自动触发校验 | boolean | - | - | |
| device | 预设屏幕宽度 | 'desktop' | 'phone' | 'tablet' | - | - | |
| colSpan | 在响应式布局模式下,表单项占多少列 | number | - | - | |
| labelWidth | 在响应式布局下,且 label 在左边时,label 的宽度是多少 | number | string | 100 | - | |
| isPreview | 是否开启预览态 | boolean | - | - | |
| renderPreview | 预览态模式下渲染的内容 签名: 参数: value: 根据包裹的组件的 value 类型而决定 |
(values: unknown) => unknown | - | - | |
| errorMessageName | 替代校验信息的 name 字段,useLabelForErrorMessage 开启的情况下比 label 优先级高 | string | - | - | |
| useLabelForErrorMessage | 是否使用 label 替换校验信息的 name 字段 | boolean | - | - | |
| preferMarginToDisplayHelp | 倾向使用 item 的 margin 空间来展示 help | boolean | false | 1.26.37 | |
| colon | 表示是否显示 label 后面的冒号 | boolean | - | - | |
| disabled | 是否禁用表单 | boolean | - | - | |
| valueName | 子元素的 value 名称 | string | - | - | |
| type | 表单类型 | string | - | - |
继承 Button API
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| onClick | 点击提交后触发 签名: 参数: value: 数据 errors: 错误数据 field: 实例 |
(value?: unknown, errors?: unknown, field?: NextField) => void | func.noop | |
| validate | 是否校验/需要校验的 name 数组 | boolean | Array<string> | - | |
| field | 自定义 field (在 Form 内不需要设置) | NextField | - |
继承 Button API
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| names | 自定义重置的字段 | Array<string> | - | |
| onClick | 点击提交后触发 | () => void | func.noop | |
| toDefault | 返回默认值 | boolean | - | |
| field | 自定义 field (在 Form 内不需要设置) | NextField | - |
自定义错误展示
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| name | 表单名 | string | Array<string> | - | |
| field | 自定义 field (在 Form 内不需要设置) | NextField | - | |
| children | 自定义错误渲染,可以是 node 或者 function(errors, state) | ReactNode | ((errors: errorsGroup, state?: FieldState) => ReactNode) | - |