设计
设计指南
设计原则
样式指南
设计资源
Klein - Figma
Klein Font
官方图标库
开发
开发文档
React
Vue Web
敬请期待
开发资源
GitHub 代码仓库
生态产品
生态产品
Orion Fonts
敬请期待
Orio Market
敬请期待
Klein Pro
敬请期待
Klein Editor
敬请期待

表单 Form

表单组件。

基础示例

表单基础用法、表单的每个formItem默认行高为32px,formItem之间的间距为24px,针对像checkbox这样的元素在formItem内部时不需要32px的行高的情况,可以设置formItem的itemCenter属性为false,使formItem的默认行高为20px。

表单布局

三种布局方式。

自定义表单校验

支持表单自定义校验。

内嵌FormItem

这里演示 Form.Item 内有多个元素的使用方式、<Form.Item name="field" /> 只会对它的直接子元素绑定表单功能,例如直接包裹了 Input/Select、如果控件前后还有一些文案或样式装点,或者一个表单项内有多个控件,你可以使用内嵌的 Form.Item 完成;你可以给 Form.Item 自定义 style 进行内联布局,或者添加 noStyle 作为纯粹的无样式绑定组件。

- <Form.Item label="Field" name="field">
-   <Input /> // 直接包裹才会绑定表单
- </Form.Item>
+ <Form.Item label="Field">
+   <Form.Item name="field" noStyle><Input /></Form.Item> // 直接包裹才会绑定表单
+   <span>description</span>
+ </Form.Item>

这里展示了三种典型场景:

  • Username:输入框后面有描述文案或其他组件,在 Form.Item 内使用 <Form.Item name="field" noStyle /> 去绑定对应子控件。

  • Address:有两个控件,在 Form.Item 内使用两个 <Form.Item name="field" noStyle /> 分别绑定对应控件。

  • BirthDate:有两个内联控件,错误信息展示各自控件下,使用两个 <Form.Item name="field" /> 分别绑定对应控件,并修改 style 使其内联布局。

注意,在 label 对应的 Form.Item 上不要在指定 name 属性,这个 Item 只作为布局作用。

表单方法调用

通过Form.useForm进行表单数据交互。

classComponent中的表单方法调用

在classComponent可以使用ref获取表单实例进行数据交互。

动态增减表单项

动态增加、减少表单项、add 方法参数可用于设置初始值。

动态增减嵌套字段

嵌套表单字段需要对 field 进行拓展,将 field.name 和 field.fieldKey 应用于控制字段。

多表单联动

通过 Form.Provider 在表单间处理数据。

验证提示模板

通过 validateMessages统一提示信息。

Form Props

参数说明类型默认值
name表单名称stringklein-form
form经 Form.useForm() 创建的 form 控制实例,不提供时会自动创建FormInstance<any>-
initialValues表单默认值,只有初始化以及重置时生效Store-
onFinish提交表单且数据验证成功后回调事件((values: any) => void)-
onFinishFailed提交表单且数据验证失败后回调事件((errorInfo: ValidateErrorEntity<any>) => void)-
scrollToFirstError提交失败时滚动到第一个错误字段booleanfalse
layout布局方式"horizontal"horizontal
labelCollabel 标签布局,属性同栅格布局<Col>组件ColProps-
wrapperCol需要为输入控件设置布局样式时,属性同栅格布局<Col>组件ColProps-
onValuesChange字段值更新时触发回调事件((changedValues: any, values: any) => void)-
onFieldsChange字段更新时触发回调事件((changedFields: FieldData[], allFields: FieldData[]) => void)-
validateMessages验证提示模板[见下文]-

Form.Item

参数说明类型默认值
labellabel 标签的文本ReactNode-
required字段是否必填boolean-
itemCenter控制label文本是否垂直居中,控制formItem的默认行高是否为32pxbooleantrue
labelWidth自定义label固定宽度number-
tipsformItem错误提示ReactNode-
trigger设置收集字段值变更的时机stringonChange
nameformItem字段名string-
rules设置字段的校验逻辑Rule[]-
shouldUpdate自定义formItem更新逻辑boolean-
dependencies定义字段依赖关系NamePath[]-
validateTrigger设置字段校验时机stringonChange
initialValue设置子元素默认值,Form 的 initialValues权重更高any-
getValueFromEvent设置子元素默认值,Form 的 initialValues权重更高((value?: any) => any)-
valuePropName子节点的值的属性,如 Switch 的是 'checked'该属性为 getValueProps 的封装,自定义 getValueProps 后会失效string-
htmlFor设置子元素 label htmlFor 属性string-
noStyle不带任何样式boolean-
labelCollabel 标签布局,属性同栅格布局 <Col> 组件ColProps-
wrapperCol需要为输入控件设置布局样式时,属性同栅格布局 <Col> 组件ColProps-
tooltip设置表单项提示信息,直接使用tooltip=‘hello word’这种形式则使用默认的icon,也可以传入对象进行自定义{icon: null, ...tooltipProps}string-
popover设置表单项提示信息,直接使用popover={{title: '大家好', content: 'hello world'}}这种形式则使用默认的icon,也可以传入对象进行自定义{icon: null, ...popoverProps}PopoverObjectType-
validateFirst当某一规则校验不通过时,是否停止剩下的规则的校验设置 parallel 时会并行校验boolean-
messageVariables默认验证字段的信息Record<string, string>-
extra额外的提示信息ReactNode-

ValidateMessages

Form 为验证提供了默认的错误提示信息,你可以通过配置 validateMessages 属性,修改对应的提示模板。

const validateMessages = {
  required: "'${name}' 是必选字段",
  // ...
};

<Form validateMessages={validateMessages} />;

贡献者