Skip to content

API 参考

FormilyEditableTable

PropTypeDefaultDescription
namestring数组字段名,内部自动创建 ArrayField(必填
columnsIColumn[]列定义(必填
addTextstring'添加'添加按钮文案
itemDefaultValueobject{}每行默认值
hideAddbooleanfalse隐藏添加按钮
maxnumber最大行数,达到上限后隐藏添加按钮
minnumber0最小行数,低于此数量不允许删除
paginationfalse | PaginationProps分页配置,传 false 关闭分页
addButtonPosition'top' | 'bottom''bottom'添加按钮位置
validateBeforeAddbooleantrue添加前校验已有行
addButtonPropsButtonProps透传给 antd Button 的属性
tablePropsTableProps透传给 antd Table 的属性

IColumn

PropTypeDescription
titleReactNode列标题
widthnumber | string列宽度
render(opt: { index: number; field: ArrayField }) => ReactNode自定义渲染
...TableColumnProps透传给 antd Table column

列的 render 函数参数:

参数类型说明
indexnumber当前行索引
fieldArrayField当前行对应的 Formily ArrayField 实例

field 常用方法:

方法说明
field.remove(index)删除指定行
field.push(value)在末尾添加一行
field.move(from, to)移动行
field.value获取当前行数据

FormilyEditableTable.Field

PropTypeDescription
namestring字段名(必填
requiredboolean必填校验
rulesany自定义校验规则(Formily 规则格式)
editablebooleanfalse 时显示只读文本
format(v: any) => any转化表单值给控件的 value
parse(v: any) => any转化控件的 onChange 值给表单
childrenReactElementantd 表单控件

format / parse

formatparse 用于表单值与控件值之间的转换:

tsx
// 示例:Select 的 value 是 string,但表单需要 number
<FormilyEditableTable.Field
  name="count"
  format={(v) => String(v)}    // number → string,给 Select 显示
  parse={(v) => Number(v)}     // string → number,存入表单
>
  <Select options={[{ label: '1', value: '1' }, { label: '2', value: '2' }]} />
</FormilyEditableTable.Field>

Switch / Checkbox

FormilyEditableTable.Field 会自动检测 antd 的 SwitchCheckbox 组件,注入 checked 属性而非 value

tsx
// 无需特殊处理,直接使用
<FormilyEditableTable.Field name="enabled">
  <Switch />
</FormilyEditableTable.Field>

工具函数

getRowPath

从字段实例中获取行级路径,用于行级联动时定位具体行。

ts
import { getRowPath } from '@react-editable-tables/formily';

// field.address = "items.0.type"
const rowPath = getRowPath(field); // "items.0"

在 effects 中配合 form.setFieldState 使用,只影响当前行:

tsx
onFieldValueChange('items.*.type', (field) => {
  const rowPath = getRowPath(field);
  form.setFieldState(`${rowPath}.subType`, (state) => {
    state.value = undefined;
  });
});

样式

样式已内联到 JS 中,导入 @react-editable-tables/formily 时自动注入,无需手动引入 CSS 文件。

样式使用 fet- 前缀,不会与项目现有样式冲突:

类名说明
.fet-table表格容器
.fet-operator删除按钮
.fet-add底部添加按钮
.fet-add-top顶部添加按钮
.fet-field单元格字段容器
.fet-error校验错误信息

基于 MIT 许可发布