5

使用 mui-datatables 的人的问题。它将数据作为字符串数组处理,但是无法加载对象数组并出现以下错误:

bundle.js:126379 Uncaught (in promise) TypeError: e.map is not a function

import MUIDataTable from "mui-datatables";

class App extends React.Component {

render() {

const columns = ["Name", "Title", "Location", "Age", "Salary"];

const data = [
  {name: "Gabby George", title: "Business Analyst", location: "Minneapolis", age: 30, salary: "$100,000"}      
];

const options = {
  filterType: 'dropdown',
  responsive: 'stacked'
};

return (
  <MUIDataTable 
    title={"ACME Employee list"} 
    data={data} 
    columns={columns} 
    options={options} 
  />
);

//return <div>a</div>;

  }

}

ReactDOM.render(<App />, document.getElementById("root"));
4

3 回答 3

7

对于它的价值,我基本上一直将我的对象数组映射到简单的值数组内联,如下所示:

const docs = [{"name": "Doc 1", "type": "PDF"}, {"name": "Doc 2", "type": "JPG"}];

<MUIDataTable
    title="Documents"
    data={docs.map(item => {
        return [
            item.name,
            item.type,
        ]
    })}
    columns={Object.keys(docs)}
/>

您可以将其集成到某种包装组件中,但在一次性情况下添加它非常简单。

注意:如果数据数组为空,MUI 数据表将不会呈现,所以我经常手动添加列,并在映射前检查数据的长度,否则返回一个类似 [[" "]] 的数组。这至少会导致呈现一个空白表。

于 2018-08-28T16:07:46.730 回答
5

mui-datatables 确实支持对象数组。为了使用对象数组,必须在列数组中指定对象属性,如下所示:

const columns = [
  { label: "Name", name: "name" },
  { label: "Title", name: "title" }, 
  { label: "Location", name: "location" }, 
  { label: "Age", name: "age" }, 
  { label: "Salary", name: "salary" }
];

const data = [
  {name: "Gabby George", title: "Business Analyst", location: "Minneapolis", age: 30, salary: "$100,000"}      
];

const options = {
  filterType: 'dropdown',
  responsive: 'stacked'
};

return (
  <MUIDataTable 
    title={"ACME Employee list"} 
    data={data} 
    columns={columns} 
    options={options} 
  />
);
于 2019-04-08T20:12:10.720 回答
2

对于那些偶然发现这个问题的人。事实证明,我没有遗漏任何东西,“mui-datatables”只支持数组数组——不支持计划中的对象数组。这太糟糕了——我相信这样的组件应该以 API 返回的方式处理数据......哦,我想我必须制作自己的包装器组件来处理它。

于 2018-03-30T23:13:01.240 回答