如何使用 object 键在 mui 数据表中设置列名
how to set column name in mui datatables using object key
我正在尝试使用 object 键来设置 MUI 数据 table 中的列名称。
我正在尝试使用 children.childName 的第一个元素设置其中一个列名
这样在该列中它将显示 child 名称的列表,但仅显示第一个 child.
在我尝试这个的当前方式中,我没有收到任何错误,并且它在 table.
的 child 名称列中没有显示任何内容
如何访问数组中的 object?
这是我的数据:
const data = [
{
name: "Pat",
company: "Test Corp",
city: "Yonkers",
state: "NY",
children: [
{ childName: "Pat Jun", childAge: 2 },
{ childName: "Mary Jun", childAge: 2 }
]
},
];
const columns = [
{
name:name: data[0]["children"][0]["childName"],
label: "Child Name",
options: {
filter: true,
sort: true
}
}]
MuiTable.js
function MuiTable({ forms }) {
console.log("cols", columns);
return (
<MUIDataTable
title={"Title"}
data={data}
columns={columns}
options={options}
/>
);
}
通过执行 console.log 我可以看到它正在打印值而不是 object 键名
非常感谢任何帮助,谢谢。
您需要像这样使用customBodyRender
:
import React from "react";
import ReactDOM from "react-dom";
import MUIDataTable from "mui-datatables";
import { Typography } from "@material-ui/core";
import "./styles.css";
function App() {
const data = [
{
name: "Pat",
company: "Test Corp",
city: "Yonkers",
state: "NY",
children: [
{ childName: "Pat Jun", childAge: 2 },
{ childName: "Mary Jun", childAge: 2 }
]
}
];
const columns = [
{
name: "children",
label: "Child Names",
options: {
filter: true,
sort: true,
customBodyRender: (value, tableMeta, updateValue) => (
<Typography>
{value.map(child => child.childName).join(",")}
</Typography>
)
}
}
];
return (
<div>
<MUIDataTable title={"Title"} data={data} columns={columns} />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
非常感谢@Klaus 的回答。这几乎是我必须做的,但在我的例子中,我只想 显示 对象数组中的对象 children 中的第一个 childName。
所以我不得不稍微调整一下并更改我的数据结构。
这就是我最终所做的。
我首先在我的数据结构中添加了一个简单的数组,它完全独立于包含名为 childNames 的子对象的数组,后者仅包含名称。
这使得访问 childNames 变得更加容易,因为它只是一个简单的数组,没有嵌套在任何东西中。
所以我只是在 Table
上显示了数组中的第一个元素
const columns = [
{
name: "childNames",
label: "Child Name",
options: {
filter: true,
customBodyRender: (value, tableMeta, updateValue) => {
return <div>{value[0]}</div>;
}
}
},
我只为 childNames 创建一个数组的原因是因为试图只访问包含子对象的数组中的第一个 childName 被证明是非常复杂和困难的。
非常感谢大家的帮助。
我正在尝试使用 object 键来设置 MUI 数据 table 中的列名称。 我正在尝试使用 children.childName 的第一个元素设置其中一个列名 这样在该列中它将显示 child 名称的列表,但仅显示第一个 child.
在我尝试这个的当前方式中,我没有收到任何错误,并且它在 table.
的 child 名称列中没有显示任何内容如何访问数组中的 object?
这是我的数据:
const data = [
{
name: "Pat",
company: "Test Corp",
city: "Yonkers",
state: "NY",
children: [
{ childName: "Pat Jun", childAge: 2 },
{ childName: "Mary Jun", childAge: 2 }
]
},
];
const columns = [
{
name:name: data[0]["children"][0]["childName"],
label: "Child Name",
options: {
filter: true,
sort: true
}
}]
MuiTable.js
function MuiTable({ forms }) {
console.log("cols", columns);
return (
<MUIDataTable
title={"Title"}
data={data}
columns={columns}
options={options}
/>
);
}
通过执行 console.log 我可以看到它正在打印值而不是 object 键名
非常感谢任何帮助,谢谢。
您需要像这样使用customBodyRender
:
import React from "react";
import ReactDOM from "react-dom";
import MUIDataTable from "mui-datatables";
import { Typography } from "@material-ui/core";
import "./styles.css";
function App() {
const data = [
{
name: "Pat",
company: "Test Corp",
city: "Yonkers",
state: "NY",
children: [
{ childName: "Pat Jun", childAge: 2 },
{ childName: "Mary Jun", childAge: 2 }
]
}
];
const columns = [
{
name: "children",
label: "Child Names",
options: {
filter: true,
sort: true,
customBodyRender: (value, tableMeta, updateValue) => (
<Typography>
{value.map(child => child.childName).join(",")}
</Typography>
)
}
}
];
return (
<div>
<MUIDataTable title={"Title"} data={data} columns={columns} />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
非常感谢@Klaus 的回答。这几乎是我必须做的,但在我的例子中,我只想 显示 对象数组中的对象 children 中的第一个 childName。 所以我不得不稍微调整一下并更改我的数据结构。
这就是我最终所做的。 我首先在我的数据结构中添加了一个简单的数组,它完全独立于包含名为 childNames 的子对象的数组,后者仅包含名称。
这使得访问 childNames 变得更加容易,因为它只是一个简单的数组,没有嵌套在任何东西中。 所以我只是在 Table
上显示了数组中的第一个元素const columns = [
{
name: "childNames",
label: "Child Name",
options: {
filter: true,
customBodyRender: (value, tableMeta, updateValue) => {
return <div>{value[0]}</div>;
}
}
},
我只为 childNames 创建一个数组的原因是因为试图只访问包含子对象的数组中的第一个 childName 被证明是非常复杂和困难的。
非常感谢大家的帮助。