reactjs - 如何在 Material-Table 中实现批量编辑
问题描述
批量编辑是一项要求的功能,但当前的材料表库只有打开多个编辑的选项,但一次只能编辑一行,我如何才能实现批量编辑?同时编辑多行?
解决方案
我通过使用该onSelectionChange
函数创建一个将处理所选行的状态来实现这一点。
const [allSelectedRows, setAllSelectedRows] = useState([]);
onSelectionChange={(rows) => {
setAllSelectedRows([...rows]);
}}
之后,我生成了一个 diff (with deep-object-diff
) 来查看这些选定行中发生了什么变化,生成了一个包含新数据的数组并更新了状态。
editable={{
isEditable: (rowData) => data[rowData.tableData.id].Locked !== true,
onRowUpdate: (newData, oldData) => new Promise((resolve) => {
const dataUpdateArray = [...data];
if (allSelectedRows.length && allSelectedRows.includes(oldData)) {// if there is multiple checkboxes selected
const updatedData = updatedDiff(oldData, newData);
allSelectedRows.map((item) => {
return Object.assign(dataUpdateArray[item.tableData.id], updatedData);
});
} else {// if there is no selected checkbox, you are editing a non-checked row
dataUpdateArray[oldData.tableData.id] = newData;
}
setData([...dataUpdateArray]);
resolve();
}),
}}
有关实现的更多细节,这里有一个堆栈闪电战,其中包含实现此功能的所有必要代码。
推荐阅读
- javascript - 尝试在 IOS 模拟器上使用 JavaScript 在 Cordova 上运行 Ionic Core 时出现问题
- asp.net - 下拉列表在重定向到另一个 Web 表单页面时失去其价值内容
- bash - sed - 循环只替换出现中的最后一种语言 - 它应该替换所有
- shopify - 在 shopify 的结帐页面上添加自定义按钮
- javascript - Ajax 在确认弹出窗口上执行了两次。怎么修?
- javascript - 在预加载器页面渲染之前立即显示网站主页
- c++ - C++ - 指定模板值类型
- python - 如何防止拆分字符串中的转义换行符(python)
- visual-studio-code - Windows 10 上的 Vscode - 无法为 Julia 1.5.3 启动可执行 shell 的路径
- firebase - Firebase Functions 部署需要在 GCP 中进行键盘输入