如何使用对象键在mui数据表中设置列名

时间:2019-12-04 19:06:07

标签: javascript json reactjs mui-datatable

我正在尝试使用对象键来设置MUI数据表中的列名。 我正在尝试使用children.childName的第一个元素设置列名称之一 以便在该列中显示子名称列表,但仅显示第一个子名称。

以我尝试此操作的当前方式,我没有收到任何错误,并且它在表的childName列中什么也不显示。

如何访问数组内的对象?

screen shot of display table

这是我的数据:

    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,我可以看到它正在打印值而不是对象键名

console.log of columns

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要像这样使用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);

答案 1 :(得分:0)

非常感谢@Klaus的回答。那几乎就是我要做的,但是就我而言,我只想 display 显示对象对象children中的第一个childName,它是对象数组。 因此,我不得不稍作调整,并更改数据结构。

这就是我最终要做的。 首先,我向数据结构中添加了一个简单的数组,该数组完全独立于包含名为childNames的子对象的数组,该子对象仅包含名称。

new data structure containing childNames array

这使得访问childNames更加容易,因为它只是一个简单的数组,没有嵌套在任何东西中。 所以我只是在表上显示数组中的第一个元素

const columns = [
{
  name: "childNames",
  label: "Child Name",
  options: {
    filter: true,
    customBodyRender: (value, tableMeta, updateValue) => {
      return <div>{value[0]}</div>;
    }
  }
},

之所以创建仅用于childNames的数组,是因为尝试仅访问包含子对象的数组中的第一个childName被证明非常复杂和困难。

非常感谢您提供的所有帮助。