Form API
Form 组件是 Schema FormX 的核心组件,用于渲染和管理表单。
导入
属性
schema
表单字段配置,可以是字段数组或分组数组。
类型:FieldSchema[] | GroupSchema[]
必填:是
示例:
layout
布局配置,控制表单的样式和布局。
类型:Layout
必填:是
示例:
components
自定义组件映射,用于注册自定义表单控件和分组容器。
类型:object
必填:是
示例:
data
受控数据,用于完全控制表单数据。
类型:object
必填:否
示例:
defaultData
默认数据,用于设置表单的初始值。
类型:object
必填:否
示例:
onChange
数据变化回调,当表单数据发生变化时触发。
类型:function
必填:否
注意事项:
onChange在字段值每次变化时立即触发(非失焦触发)- 每次值变化会同步触发依赖联动和字段验证
- 回调中的
data参数为冻结对象(Object.freeze),需浅拷贝后修改
示例:
实例方法
通过 ref 获取表单实例,可以调用以下方法:
getData
获取表单数据。返回的对象会被 Object.freeze 冻结,直接修改会抛出运行时错误。
注意事项:
- 返回的数据是冻结对象,不可直接修改
- 如果需要修改数据,请先进行浅拷贝:
const data = { ...formRef.current.getData() } onChange回调中的data参数同样被冻结
示例:
setData
设置表单数据。
注意事项:
- 调用
setData会自动触发所有字段的依赖联动(onDepsChange),以确保联动字段的 schema 和数据保持一致 - 传入的数据会完全替换现有表单数据(非浅合并)
setData不会触发onChange回调,也不会触发验证。如需验证,请手动调用validate()
示例:
reset
重置表单到默认数据。
注意事项:
- 调用
reset会自动触发所有字段的依赖联动(onDepsChange),以确保联动字段的 schema 和数据恢复一致 reset不会触发onChange回调,也不会触发验证
示例:
validate
验证表单,返回验证结果。
示例:
isDirty
检查表单数据是否偏离初始值(与 defaultData 对比)。
等价值判断规则:比较时会根据字段类型视某些值为等价:
例如,defaultData 中某字段值为空字符串 '',当前值为 undefined,对于 string 类型字段 isDirty() 返回 false。
示例:
Layout 详细配置
SetUI 类型
SetUI 是一个工具类型,用于生成带前缀的 ClassName 和 Style 配置。
示例:
Form 配置
Group 配置
Field 配置
Label 配置
Tip 配置
Control 配置
按分组配置
按字段配置
渲染 HTML 结构与 CSS 属性
Form 组件渲染时会自动生成以下 HTML 结构和 CSS data 属性,可用于外部样式控制:
CSS data 属性:
使用示例: