order: 1 group: order: 6 title: API

toc: content

Props

参数 描述 类型 默认值
schema 必填,描述表单的 schema,详见 schema 规范 SchemaBase -
form 必填useForm 创建的表单实例,与 Form 一对一绑定,详见Forminstance FormInstance -
onFinish 提交后的回调,执行 form.submit() 后触发 (data, errors: Error[]) => void -
beforeFinish 在 onFinish 前触发,一般用于外部校验逻辑的回填 `({ data, errors, schema, …rest }) => Error[] \ Promise` -
onMount 表单首次加载时触发,详见生命周期 () => void -
displayType 表单元素与 label 同行 or 分两行展示, inline 则整个展示自然顺排 `’column’ \ ‘row’ \ ‘inline’` column
labelAlign label 标签的文本对齐方式 `’left’ \ ‘right’` right
colon 是否显示 label 后面的冒号 boolean true
widgets 自定义组件,当内置组件无法满足时使用,详见Widgets Record<string, ReactNode> -
watch 监听表单的数据变化,详见Watch `Record void \ { handler:(val:any) => void,immediate?: boolean }>` -
removeHiddenData 提交数据的时候是否去掉已经被隐藏的元素的数据,默认不隐藏 boolean false
readOnly 只读模式,一般用于预览展示,全文 text 展示 boolean false
className 顶层 className string -
style 顶层 style CSSProperties -
column 一行展示多少列 number 1
mapping schema 与组件的映射关系表,当内置的表不满足时使用 Record<string, string> -
disabled 禁用全部表单项 boolean false
debugCss 用于 css 问题的调整,显示 css 布局提示线 boolean false
locale 展示语言,目前只支持中文、英文 `’cn’ \ ‘en’` cn
configProvider antd 的 configProvider,配置透传 ConfigProviderProps -
allCollapsed 对象组件是否默认折叠(全局) boolean false
debounceInput 是否开启输入时使用快照模式。仅建议在表单巨大且表达式非常多时开启 boolean false
validateMessages 修改默认的校验提示信息,详见ValidateMessages Record<string, string> -
debug 开启 debug 模式,时时显示表单内部状态,开发的时候强烈建议打开 boolean false
id 表单的 id,一般用于标识一个表单的语义化名称 `string \ number` -

FormInstance

参数 描述 类型
submit 触发提交流程,一般在提交按钮上使用 () => void
resetFields 清空表单(也会清空一些内置状态,例如校验) ({formData?: any, submitData?: any, errorFields?: Error[], touchedKeys?: string[], allTouched?: boolean}) => void
errorFields 表单校验错误的数组 Error[]
setErrorFields 外部手动修改 errorFields 校验信息,用于外部校验回填 (error: Error[]) => void
setValues 外部手动修改 formData,用于已填写的表单的数据回填 (formData: any) => void
setValueByPath 外部修改指定单个 field 的数据(原名 onItemChange) (path: Path, value: any) => void
setSchemaByPath 指定路径修改 schema (path: Path, value: any) => void
setSchema 指定多个路径修改 schema ({ path: value }) => void
getValues 获取表单内部维护的数据 formData () => any
schema 表单的 schema object
touchedKeys 已经触碰过的 field 的数据路径 Path[]
removeErrorField 外部手动删除某一个 path 下所有的校验信息 (path: Path) => void
formData 表单内部维护的数据,建议使用 getValues/setValues Record<string, any>

react 更新机制导致,同时多次调用 setSchemaByPath 无效,所以请使用 setSchema,事实上setSchema 能完全覆盖 setSchemaByPath 的场景。

Widgets

当内置组件不能满足需求时,可以传入自定义组件。

```jsx | pure import { Cascader } from ‘antd’;

// 顶层引入注册

// schema 中使用 location: { title: ‘省市区’, type: ‘string’, widget: ‘cascader’, },

  1. ### Watch
  2. 用于数据的监听的唤起回调。语法类似于 vue `watch`
  3. ```tsx | pure
  4. type WatchProperties = Record<
  5. Path,
  6. (val: any) => void | {
  7. handler: (val: any) => void;
  8. immediate?: boolean; // 是否在首次加载时就执行一次 watch 的 handler
  9. }
  10. >;
  11. const watch: WatchProperties = {
  12. '#': val => {
  13. // # 为全局
  14. console.log('表单的实时数据为:', val);
  15. },
  16. path1: val => {
  17. // do something ...
  18. },
  19. path2: {
  20. handler: val => {},
  21. immediate: true,
  22. },
  23. };
  24. <Form watch={watch} />;

ValidateMessages

Form-Render 为验证提供了默认的错误提示信息,你可以通过配置 validateMessages 属性,修改对应的提示模板。一种常见的使用方式,是配置国际化提示信息。

```jsx | pure const validateMessages = { required: ‘${title}是必选字段’, // … };

;

  1. 目前可以用的转义字段为 `${title}``${min}``${max}``${len}``${pattern}`, 如果有更多需求请提 [issue](https://github.com/alibaba/x-render/issues/new/choose)。
  2. ### Path
  3. `path` 代表一个表单项在 schema 中的路径,在调用 `form.setSchemaByPath``watch` api 时,需要用到。
  4. ```js
  5. const schema = {
  6. type: 'object',
  7. properties: {
  8. // 没有嵌套元素的普通表单中
  9. // 此元素的 path 为 'address'
  10. address: {
  11. title: '地址',
  12. type: 'string',
  13. },
  14. // 表单中嵌套了一个对象类型的元素时
  15. obj: {
  16. title: '对象',
  17. type: 'object',
  18. properties: {
  19. // 此元素的 path 为 'obj.select'
  20. select: {
  21. title: '单选',
  22. type: 'string',
  23. enum: ['a', 'b', 'c'],
  24. enumNames: ['早', '中', '晚'],
  25. },
  26. },
  27. },
  28. // 在 list 类型的表单元素中,使用 [] 表示 list
  29. list: {
  30. title: '对象数组',
  31. type: 'array',
  32. items: {
  33. type: 'object',
  34. properties: {
  35. // 此元素的 path 为 'list[].input'
  36. input: {
  37. title: '输入框',
  38. type: 'string',
  39. },
  40. object: {
  41. title: '对象',
  42. type: 'object',
  43. properties: {
  44. // 此元素的 path 为 'list[].object.select'
  45. select: {
  46. title: '选择框',
  47. type: 'string',
  48. enum: ['a', 'b', 'c'],
  49. enumNames: ['早', '中', '晚'],
  50. },
  51. },
  52. },
  53. },
  54. },
  55. },
  56. },
  57. };

Error

  1. type Error = {
  2. /** 错误的数据路径 */
  3. name: string;
  4. /** 错误的内容 */
  5. error: string[];
  6. };

Hooks

UseForm

useForm 用于创建表单实例,使用时需要创建实例,并传入与其对应的表单上。

```jsx | pure import Form, { useForm } from ‘form-render’;

const Demo = () => { const form = useForm(); return

; };

  1. 如果是 class 组件可以使用 `connectForm` ,作用与 `useForm` 相同。
  2. ```jsx | pure
  3. import Form, { connectForm } from 'form-render';
  4. const Demo = ({ form }) => {
  5. return <Form form={form} />;
  6. };
  7. export default connectForm(Demo);

useForm 可以传入以下参数,详见表单健康度 & 提效

jsx | pure const form = useForm({ logOnMount: info => {}, // 会在表单首次加载时触发, 获取表单信息 logOnSubmit: info => {}, // 会在 form.submit 时触发,获取表单信息(如填写时长、报错信息等) });