javascript - 材料表示例未按预期工作
问题描述
在 Material-UI 的网站表格页面中,有一个我有兴趣用于项目的特定表格,标记为 material-table ( https://material-ui.com/components/tables/#material-table )。它有一个搜索栏,一个用于添加新行的按钮,以及编辑或删除现有行的可能性,也可以通过按钮。在该站点中,一切正常,但提供的源代码没有,我不知道为什么。
import React from 'react';
import MaterialTable from 'material-table';
export default function MaterialTableDemo() {
const [state, setState] = React.useState({
columns: [
{ title: 'Name', field: 'name' },
{ title: 'Surname', field: 'surname' },
{ title: 'Birth Year', field: 'birthYear', type: 'numeric' },
{
title: 'Birth Place',
field: 'birthCity',
lookup: { 34: 'İstanbul', 63: 'Şanlıurfa' },
},
],
data: [
{ name: 'Mehmet', surname: 'Baran', birthYear: 1987, birthCity: 63 },
{
name: 'Zerya Betül',
surname: 'Baran',
birthYear: 2017,
birthCity: 34,
},
],
});
return (
<MaterialTable
title="Editable Example"
columns={state.columns}
data={state.data}
editable={{
onRowAdd: newData =>
new Promise(resolve => {
setTimeout(() => {
resolve();
setState(prevState => {
const data = [...prevState.data];
data.push(newData);
return { ...prevState, data };
});
}, 600);
}),
onRowUpdate: (newData, oldData) =>
new Promise(resolve => {
setTimeout(() => {
resolve();
if (oldData) {
setState(prevState => {
const data = [...prevState.data];
data[data.indexOf(oldData)] = newData;
return { ...prevState, data };
});
}
}, 600);
}),
onRowDelete: oldData =>
new Promise(resolve => {
setTimeout(() => {
resolve();
setState(prevState => {
const data = [...prevState.data];
data.splice(data.indexOf(oldData), 1);
return { ...prevState, data };
});
}, 600);
}),
}}
/>
);
}
上面的代码是网站上显示的代码。但是,当我尝试使用它时,虽然“编辑”按钮允许我更改所选行的字段,但使用“保存”按钮时不会保存更改。
此外,删除似乎总是删除表的最后一行,即使它不是我选择删除的那一行。但是,添加新行似乎可以正常工作。
我怎样才能解决这个问题?
解决方案
const data = [...prevState.data];
data[data.indexOf(oldData)] = newData;
我把它改成:
const foundIndex = oldData.findIndex(x => x.name === newData.name)
data[foundIndex] = newData
return data
推荐阅读
- posix - 我应该使用“fd == -1”还是“fd < 0”来测试无效的文件描述符?
- java - 如何在 webView 中向网站添加 CSS(填充)
- python - SQL Alchemy 使用 Or_ 循环多列(Pandas Dataframes)
- python - 由于 PyQt5.QtWebKitWidgets 无法启动 spyder
- postgresql-9.6 - 使用 Rails 5.1.6 查询 PostgresSQL(9.6.5) JSONb 列对于多个键值对
- docusignapi - Java 和 Docusign 集成
- java - 是否可以在不删除子字符串的情况下拆分它?
- java - com.ibm.ws.webcontainer.servlet.ServletWrapper java.lang.NoClassDefFoundError: org.apache.woden.resolver.URIResolver
- laravel - 更新整个表(Laravel 和 Vuejs)
- css - 如何从 Chrome 浏览器中找到 CSS