推荐一款React网格组件ka-table

常用功能应有尽有,吸顶、行展开、虚拟化、单元格编辑、输入验证和筛选等。

官网地址:ka-table

盘点实践操作。

列key不能有rowKeyField

每个表格都有行关键字段rowKeyField,比如id,列columns中key不能有此字段,不然会引起行列错乱。

新增行

demo中新增行,分三步:打开新行编辑器、编辑行和保存行数据。相对较繁琐,通过代码来直接新建默认行:

dispatch(showNewRow());  
dispatch(saveNewRow(nodeId));
dispatch(updateCellValue(nodeId, 'name', nodeData.name));

获取选中行

有专门工具接口:

const selectedData = kaPropsUtils.getSelectedData(tableProps);

单独单元格禁止编辑

类似自定义编辑器,返回非输入型标签内容。

childComponents={{
    cellEditor: {
        content: (props) => {
            if (props.rowData.id === props.column.toNodeId) {
                return <div>-</div>;
            }
        }
    }
}}

操作action

表格所有变动都能在dispatch中体现,监听处理相应业务。

const dispatch = (action) => {
	changeTableProps((prevState) => kaReducer(prevState, action));
};

删除row前先deselectRow

ka-table应该是使用了对象池,删除行后再新建行,会出现被删行的属性,如选中效果。因此删除行后,最好同时重置下相关状态。

dispatch(deselectRow(0));
dispatch(deleteRow(0));