table单元格编辑触发handleSave函数保存并更新数据
相关文档:https://reactjs.org/docs/faq-state.html
/*
setDataSource的时候handleSave更新了
但是dealTableColumns传给单元格的handleSave事件还是旧的
导致编辑单元格时,修改多次数据会出现前面修改的数据恢复原始数据
useCallback没有更新dealTableColumns里面的handleSave
*/
const handleSave = useCallback((row) => {
const newData = [...dataSource];
const index = newData.findIndex((item) => row.key === item.key);
const item = newData[index];
newData.splice(index, 1, { ...item, ...row });
setDataSource(newData)
}, [dataSource])
/* 修改如下
将赋值写成函数的形式,dataSource作为参数传入
*/
const handleSave = useCallback((row) => {
setDataSource((dataSource) => {
const newData = [...dataSource];
const index = newData.findIndex((item) => row.key === item.key);
const item = newData[index];
newData.splice(index, 1, { ...item, ...row });
return newData
})
}, [])
const dealTableColumns = tableColumns => {
let columnList = _.cloneDeep(tableColumns);
columnList = columnList.map(col => {
return col.editable ? {
...col,
onCell: (record) => ({
record,
editable: col.editable,
dataIndex: col.dataIndex,
title: col.title,
handleSave: handleSave
})
} : col
});
return columnList;
};