tyl*_*mck 12 datagrid material-ui
我正在尝试获取刚刚从 mui 数据网格编辑的值。我的用例是我希望能够获取这些值并更新状态/发送更新数据库的请求。
我尝试过使用onEditRowsModelChange和onRowEditStop属性,但onEditRowsModelChange更新过于频繁,无法满足我的需求,并且onRowEditStop返回以前的值,但不是最近更新的值。这些值也采用需要解析才能获得的形式。
有没有人有这方面的经验?
Adh*_*h M 10
使用默认编辑模式(单元格编辑模式),您必须使用onCellEditCommit
const onCellEditCommit= (cellData) => {
const { id, field, value } = cellData;
...
}
<DataGrid
onCellEditCommit={onCellEditCommit}
...
Run Code Online (Sandbox Code Playgroud)
在行编辑模式下,您可以使用,processRowUpdate但请确保您使用的experimentalFeatures={{ newEditingApi: true }}是数据网格
const processRowUpdate = (newRow) => {
const updatedRow = { ...newRow, isNew: false };
...
return updatedRow;
};
<DataGrid
editMode="row"
processRowUpdate={processRowUpdate}
experimentalFeatures={{ newEditingApi: true }}
...
Run Code Online (Sandbox Code Playgroud)
您可以使用 OnCellEditCommit
<DataGridPro
rows={rows}
columns={columns}
onCellEditCommit={handleRowEditCommit}
/>
Run Code Online (Sandbox Code Playgroud)
你的handleRowEditCommit函数将如下所示
const handleRowEditCommit = React.useCallback(
(params) => {
const id = params.id;
const key = params.field;
const value = params.value; },
[]
);
Run Code Online (Sandbox Code Playgroud)
我有一个使用 onEditRowsModelChange 方法的相当丑陋的解决方案。正如您提到的,它会进行一些去抖动和解析:
let timer;
const handleEditRowsModelChange = (model) => {
if(timer) clearTimeout(timer);
timer = setTimeout(() => {
setEditRowsModel(model);
let siteId = Object.keys(model)[0];
let field = siteId ? Object.keys(model[siteId])[0] : null;
let value = field ? model[siteId][field].value : null;
siteId && field && (
sites.forEach(site => {
if (site.id == siteId) {
if (site[field] != value) {
site[field] = value;
sendSiteForEdit(site);
}
};
}
));
}, 1500);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20977 次 |
| 最近记录: |