I'm trying to render the data using ant design table but it doesn't work. I think it's because of the object key "children" in my response.
When I run my code I get the error: TypeError: (data || []).forEach is not a function
I would also like to note that I have uploaded csv file data without "children" column and it works perfectly.
My response:
import React, { useState } from "react";
import { parse } from "papaparse";
import _ from "lodash";
import { Upload, message, Button, Table, Input } from "antd";
import { UploadOutlined } from "@ant-design/icons";
export default function Home() {
const [columns, setColumn] = useState([]);
const [baseData, setBaseData] = useState([]);
const [filterTable, setFilterTable] = useState(null);
const props = {
name: "file",
accept: ".txt, .csv",
headers: {
authorization: "authorization-text",
},
async onChange(info) {
if (info.file.status !== "uploading") {
console.log(info.file, info.fileList);
}
if (info.file.status === "done") {
const texts = await info.file.originFileObj.text();
const results = parse(texts, {
header: true
});
const col = _.keys(results.data[0]);
const customCol = _.map(col, (value) => ({
title: value,
dataIndex: value,
key: value.toLowerCase(),
}));
const data = results.data;
console.log({ customCol });
console.log({ data });
setColumn(customCol);
setBaseData(data);
message.success(`${info.file.name} file uploaded successfully`);
} else if (info.file.status === "error") {
message.error(`${info.file.name} file upload failed.`);
}
},
};
return (
<div>
<main>
<Upload {...props}>
<Button icon={<UploadOutlined />}>Click to Upload</Button>
</Upload>
<Table pagination={false} columns={columns} dataSource={filterTable == null ? baseData : filterTable} />
</main>
</div>
);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
Here's the table props:
export interface TableProps < RecordType > extends Omit < RcTableProps < RecordType > , 'transformColumns' | 'internalHooks' | 'internalRefs' | 'data' | 'columns' | 'scroll' | 'emptyText' > {
dropdownPrefixCls ? : string;
dataSource ? : RcTableProps < RecordType > ['data'];
columns ? : ColumnsType < RecordType > ;
pagination ? : false | TablePaginationConfig;
loading ? : boolean | SpinProps;
size ? : SizeType;
bordered ? : boolean;
locale ? : TableLocale;
onChange ? : (pagination: TablePaginationConfig, filters: Record < string, (Key | boolean)[] | null > , sorter: SorterResult < RecordType > | SorterResult < RecordType > [], extra: TableCurrentDataSource < RecordType > ) => void;
rowSelection ? : TableRowSelection < RecordType > ;
getPopupContainer ? : GetPopupContainer;
scroll ? : RcTableProps < RecordType > ['scroll'] & {
scrollToFirstRowOnChange ? : boolean;
};
sortDirections ? : SortOrder[];
showSorterTooltip ? : boolean;
}
export interface TableProps < RecordType = unknown > extends LegacyExpandableProps < RecordType > {
prefixCls ? : string;
className ? : string;
style ? : React.CSSProperties;
children ? : React.ReactNode;
data ? : RecordType[];
columns ? : ColumnsType < RecordType > ;
rowKey ? : string | GetRowKey < RecordType > ;
}
What could be the problem?
from TypeError: (data || []).forEach is not a function
No comments:
Post a Comment