组件简介

基于antd的Table、Form、等组件封装的一个可编辑表格组件,支持单行编辑、多行编辑,编辑之后数据自动保存更新,简化控件之间的联动实现,简化表格类数据编辑

啥也不说了直接上代码:

  • 基础使用,全表可编辑编辑
import React from 'react';
import { Editable } from 'dumi';
import { Input, Button, InputNumber } from 'antd';

const fields = [
  {
    title: '姓名',
    id: 'name',
    width: '30%',
    editable: true,
  },
  {
    title: '简介',
    id: 'info',
    children: [
      {
        title: '年龄',
        id: 'age',
        editable: true,
        renderFormInput: () => {
          return <InputNumber />;
        }
      },
      {
        title: '身高',
        id: 'height'
      }
    ]
  },
  {
    title: '地址',
    id: 'address',
    editable: true,
    renderFormInput: () => {
      return <Input />
    },
    trigger: 'onBlur',
  }
]

export default () => {
  return <div>
    <Editable
      defaultData={{age: 90}}
      fields={fields}
      onChange={val => {
        console.log(val);
      }} />
  </div>;
};

效果:

  • 选项联动
import React from 'react';
import { Editable } from 'dumi';
import { Input, Button, InputNumber } from 'antd';

const fields = [
  {
    title: '姓名',
    width: '30%',
    id: 'name',
    editable: true,
    children: [
      {
        title: '姓氏',
        id: 'firstName',
        editable: true,
        renderFormInput: (record, { value, onChange }, form) => {
          return <Input 
            value={value} 
            maxLength={3}
            onChange={(val) => {
              if (onChange) onChange(val);
              form.setFieldsValue({
                allName: `${val?.target?.value}-${record?.lastName || ''}`,
              })
            }} />
        },
      },
      {
        title: '名字',
        id: 'lastName',
        editable: true,
        renderFormInput: (record, { value, onChange }, form) => {
          return <Input 
            value={value}
            onChange={(val) => {
              if (onChange) onChange(val);
              form.setFieldsValue({
                allName: `${record?.firstName || ''}-${val?.target?.value}`,
              })
            }} />
        },
      },
      {
        title: '全名',
        id: 'allName',
        column: {
          render: (text) => {
            return <div style={{width: 120}}>{text}</div>
          }
        }
      }
    ]
  },
  {
    title: '地址',
    id: 'address',
    editable: true,
    renderFormInput: () => {
      return <Input />
    },
    trigger: 'onBlur',
  }
]

export default () => {
  return <div>
    <Editable
      defaultData={{age: 90}}
      fields={fields}
      onChange={val => {
        console.log(val);
      }} />
  </div>;
};

效果:

使用API:

  • EditableProps
参数说明类型默认值
valuetabe列表的值FieldType-
fields表格列的配置描述,具体项见下表FieldType[]-
onChange表格数据改变的回调(value: object[]) => void;-
multiple是否开启多行编辑功能booleantrue
defaultData表格新增单元格默认数据object-
getActionRef获取组件操作函数组的回调(ref: React.MutableRefObject<actionRefType>) => void;-
deleteBtnText删除按钮文案React.ReactNode删除
hideAddBtn是否隐藏底部的新增按钮Booleanfalse
addBtnProps新增按钮配置项, 配置同antd的ButtonButtonProps-
addBtnText新增按钮文案React.ReactNode添加一行
tableProps表格的配置项,同antd里的Table组件配置,但是组件拦截了配置项中的:pagination、rowKey、components、dataSource、columns、onRowTableProps-
max列表最大长度number-
onRowValuesChange行数据变化的回调函数,可用于数据联动;onRowValuesChangeType-
deleteBtnProps删除按钮配置选项ButtonProps-
deleteBtnText删除按钮文案string删除
editBtnProps编辑按钮配置选项ButtonProps-
editBtnText编辑按钮文案string编辑
saveBtnProps保存按钮配置选项ButtonProps-
saveBtnText保存按钮文案string保存
cancelBtnProps取消按钮配置选项ButtonProps-
cancelBtnText取消按钮文案string取消
optionExtraBefore操作选项前面的元素;注意:单行编辑时,编辑状态下不显示--
optionExtraAfter操作选项后面的元素;注意:单行编辑时,编辑状态下不显示--
optionSpaceProps当操作选项有多个元素时,会使用Space包裹,optionSpaceProps 为Space组件的配置,或者配置成false,不使用组件包裹`SpacePropsBoolean`-
optionRender自定义操作选项(r: Record, optionNodes: object) => React.ReactChild-

fields

参数说明类型
title表格标题string
id当前列对应字段名表格的dataIndex,formItem的name配置项的默认值
formItemPropsFormItem 组件配置项
column同Table表格的column数据,但拦截了children属性,如需要相关配置请使用fields的children属性
children子配置项,配置同field选项
renderFormInput可编辑单元格输入框生成函数, 细节如下renderFormInput
editable当前行是否可编辑
  • ActionRef
名称说明类型
setRowsData更新行数据(rowData: R, rowIndex: number) => void
handleAdd新增一行, 函数参数作为新增数据的默认值,当没有参数时使用defaultData作为默认值(v?: R) => void
handleDelete删除一行(key: rowIndex) => void
handleEdit单行编辑时,开启编辑某行(key: rowIndex) => void

组件主页:https://yigexiaoairen.github.io/

github地址:https://github.com/yigexiaoairen/am-editable

备注:后期会逐渐完善功能,比如:新增排序功能、全表编辑支持提交校验等


angel
2 声望0 粉丝