Material UI 带有嵌套数据的数据网格
Material UI datagrid with nested data
如何在 React material UI 数据网格上呈现嵌套的 JSON 数据。在附带的沙箱中,我想显示数据网格上 json 的 phone 用户数量 - Nested JSON Data Grid
为了解决这个问题,让我们看看params
对象传入valueGetter
函数。记录下来,你会在它下面找到一个 row
对象。您应该访问 row
对象,而不是使用 params.getValue()
。似乎 params.getValue()
只能用于一级 JSON 对象。这是输出 phone
字段的代码片段。
{
field: "phone",
headerName: "Phone",
width: 160,
valueGetter: (params) => {
console.log({ params });
let result = [];
if (params.row.phone) {
if (params.row.phone.home) {
result.push("home: " + params.row.phone.home);
}
if (params.row.phone.office) {
result.push("office: " + params.row.phone.office);
}
} else {
result = ["Unknown"];
}
return result.join(", ");
}
}
更新
为了更灵活地检查对象下的每个键是否存在,我创建了一个辅助方法:
const checkKeysUnderObject = (obj, result) => {
for (let key in obj) {
if (key) { // push the value to the result array only if key exists
result.push(key + ": " + obj[key]);
}
}
};
辅助方法的使用:
if (params.row.phone) {
checkKeysUnderObject(params.row.phone, result);
}else{
result = ["Unknown"];
}
我也更新了codesandbox here。
我在我的项目中使用这个:
{
field: 'idMaintenancePlan',
headerName: 'Plan de maintenance',
sortable: false, width: 200,
valueFormatter: (params) => params.row?.maintenancePlan?.name
}
这对我来说很好
{ field: 'parserInfo', headerName: 'Parser Title', valueFormatter: ({ value }) => value.title }
这也很好用
{
field: "family",
headerName: "Family",
width: 150,
renderCell: (params) => {
return <div className="rowitem">{params.row.family.name}</div>;
},
},
如何在 React material UI 数据网格上呈现嵌套的 JSON 数据。在附带的沙箱中,我想显示数据网格上 json 的 phone 用户数量 - Nested JSON Data Grid
为了解决这个问题,让我们看看params
对象传入valueGetter
函数。记录下来,你会在它下面找到一个 row
对象。您应该访问 row
对象,而不是使用 params.getValue()
。似乎 params.getValue()
只能用于一级 JSON 对象。这是输出 phone
字段的代码片段。
{
field: "phone",
headerName: "Phone",
width: 160,
valueGetter: (params) => {
console.log({ params });
let result = [];
if (params.row.phone) {
if (params.row.phone.home) {
result.push("home: " + params.row.phone.home);
}
if (params.row.phone.office) {
result.push("office: " + params.row.phone.office);
}
} else {
result = ["Unknown"];
}
return result.join(", ");
}
}
更新
为了更灵活地检查对象下的每个键是否存在,我创建了一个辅助方法:
const checkKeysUnderObject = (obj, result) => {
for (let key in obj) {
if (key) { // push the value to the result array only if key exists
result.push(key + ": " + obj[key]);
}
}
};
辅助方法的使用:
if (params.row.phone) {
checkKeysUnderObject(params.row.phone, result);
}else{
result = ["Unknown"];
}
我也更新了codesandbox here。
我在我的项目中使用这个:
{
field: 'idMaintenancePlan',
headerName: 'Plan de maintenance',
sortable: false, width: 200,
valueFormatter: (params) => params.row?.maintenancePlan?.name
}
这对我来说很好
{ field: 'parserInfo', headerName: 'Parser Title', valueFormatter: ({ value }) => value.title }
这也很好用
{
field: "family",
headerName: "Family",
width: 150,
renderCell: (params) => {
return <div className="rowitem">{params.row.family.name}</div>;
},
},