Table基础组件
npm install --save react-widget-table-basic
import TableBasic from 'react-widget-table-basic';
import 'react-widget-table-basic/style';
const dataSource = [
{
key: '1',
name: '胡彦斌',
age: 32,
address: '西湖区湖底公园1号',
},
{
key: '2',
name: '胡彦祖',
age: 42,
address: '西湖区湖底公园1号',
},
];
const columns = [
{
title: '姓名',
dataIndex: 'name',
key: 'name',
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
},
{
title: '住址',
dataIndex: 'address',
key: 'address',
},
];
<TableBasic data={dataSource} columns={columns} />;
export interface TableBasicProps<T = DataType> {
prefixCls?: string;
className?: string;
style?: React.CSSProperties;
columns: Column<T>[];
data: T[];
tableLayout?: "auto" | "fixed";
getHeaderRowProps?: (props: RenderProps, columns: TCell<Column<T>>[], index: number) => RenderProps;
getRowProps?: (props: RenderProps, data: T, index: number) => RenderProps;
getRowKey: (data: T, index: number) => React.Key;
getRowClassName?: (data: T, index: number) => string;
showHeader?: boolean;
showBody?: boolean;
emptyText?: React.ReactNode;
emptyRender(props: RenderProps): React.ReactNode;
tableRender(props: RenderProps): React.ReactNode;
headerRender: (props: RenderProps) => React.ReactElement | null;
headerRowRender: (props: RenderProps) => React.ReactElement | null;
headerCellRender: (props: RenderProps) => React.ReactElement | null;
bodyRender: (props: RenderProps) => React.ReactElement | null;
bodyRowRender: (props: RenderProps) => React.ReactElement | null;
bodyCellRender: (props: RenderProps) => React.ReactElement | null;
}
export interface TableBasicState<T = DataType> {
columns: Column<T>[];
flattenColumns: Column<T>[];
columnStore: TreeStore;
leafColumns: Column<T>[];
computedColumn: TCell<Column<T>>[][];
}
export declare type DataType = Record<any, any>;
export interface Column<T = DataType> {
title?: React.ReactNode;
dataIndex?: string | number;
width?: string | number;
minWidth?: string | number;
maxWidth?: string | number;
className?: string;
key?: string | number;
align?: "left" | "center" | "right";
ellipsis?: boolean;
children?: Column<T>[];
render?: (text: any, data: T, index: number) => React.ReactNode;
headerRender?: (text: any, column: Column<T>, index: number) => React.ReactNode;
getCellProps?: (props: RenderProps, data: T, index: number) => RenderProps;
getHeaderCellProps?: (props: RenderProps, column: Column<T>, index: number) => RenderProps;
}
export interface RenderProps extends React.AllHTMLAttributes<any> {
key?: React.Key;
ref?: React.Ref<any>;
children: React.ReactNode;
[x: string]: any;
}
{
prefixCls: "rw-table",
tableLayout: "auto",
columns: [],
data: [],
showHeader: true,
showBody: true,
getRowKey(data, index) {
return data["key"] ?? index;
},
emptyText: "No Data.",
emptyRender(props) {
return <div {...props} />;
},
tableRender(props) {
return <table {...props} />;
},
headerRender(props) {
return <thead {...props} />;
},
headerRowRender(props) {
return <tr {...props} />;
},
headerCellRender(props) {
return <th {...props} />;
},
bodyRender(props) {
return <tbody {...props} />;
},
bodyRowRender(props) {
return <tr {...props} />;
},
bodyCellRender(props) {
return <td {...props} />;
},
}
.rw-table {
width: 100%;
table-layout: auto;
text-align: left;
border-style: solid;
border-width: 1px 0 0 1px;
border-color: #e8e8e8;
}
.rw-table-head-cell {
padding: 4px 10px;
background-color: #fafafa;
border-color: #e8e8e8;
border-style: solid;
border-width: 0 1px 1px 0;
line-height: 28px;
color: rgba(0, 0, 0, 0.85);
overflow-wrap: break-word;
}
.rw-table-body-cell {
padding: 4px 10px;
border-color: #e8e8e8;
border-style: solid;
border-width: 0 1px 1px 0;
line-height: 28px;
background-color: #fff;
overflow-wrap: break-word;
}
.rw-table-cell-ellipsis {
overflow: hidden;
white-space: nowrap;
word-wrap: normal;
text-overflow: ellipsis;
}
.rw-table-empty-text {
background-color: #fff;
text-align: center;
}