【问题标题】:how to set column name in mui datatables using object key如何使用对象键在 mui 数据表中设置列名
【发布时间】:2020-03-29 16:08:46
【问题描述】:

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

在我尝试这个的当前方式中,我没有收到任何错误,并且它在表格的 childName 列中没有显示任何内容。

如何访问数组中的对象?

这是我的数据:

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

非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: javascript json reactjs mui-datatable


    【解决方案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);
    
    

    【讨论】:

      【解决方案2】:

      非常感谢@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 被证明是非常复杂和困难的。

      非常感谢大家的帮助。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        相关资源
        最近更新 更多