【React】Table表头纵向展示

默认表格展示:
在这里插入图片描述
展示目标:
在这里插入图片描述


环境

  • antd: ^5.14.1
  • react: ^18

拟定数据

- columns

const columns = [
  {
    title: "品牌",
    dataIndex: "brand",
    key: "brand",
    width: 100,
  },
  {
    title: "Star",
    dataIndex: "star",
    key: "star",
    width: 100,
  }
];

- dataSource

const dataSource = [
  {
    key: "1",
    brand: "logitech",
    star: 4.3
  },
  {
    key: "2",
    brand: "NexiGo",
    star: 3.1
  },
  {
    key: "3",
    brand: "logitech2",
    star: 4.3
  },
  {
    key: "4",
    brand: "NexiGo2",
    star: 3.1
  },
  {
    key: "5",
    brand: "NexiGo3",
    star: 3.1
  },
  {
    key: "6",
    brand: "NexiGo4",
    star: 3.1
  },
  {
    key: "7",
    brand: "NexiGo5",
    star: 3.1
  },
  {
    key: "8",
    brand: "NexiGo6",
    star: 3.1
  },
];

测试组件

import type { TableProps } from "antd";

import { useEffect, useState } from "react";
import { Table } from "antd";
import { transformData } from "./unit";

type Props = {
  dataSource: any[];
  columns: string[];
};

export const TestTable = function (props: Props) {
  const [tableList, setTableList] = useState<any>([]);
  const [tableColumns, setTableColumns] = useState<any[]>([]);

  useEffect(() => {
    const { columns, data } = transformData(props.dataSource);

    setTableColumns(columns)
    setTableList(data);
  }, []);


  return (
    <Table
       columns={tableColumns}
       dataSource={tableList}
       bordered
       scroll={{ x: "100%", y: "auto" }}
       showHeader={true}
       pagination={false}
     />
  );
};

export default TestTable;

数据转换:

// file: ./unit.ts
export function transformData(originalData: any[]) {
  let keys = Object.keys(originalData[0]).filter((key) => key !== "key");
  let columns = [{ title: "first", dataIndex: "first", key: "first" }];

  originalData.forEach((key, index) => {
    columns.push({
      title: `col${index + 1}`,
      dataIndex: `col${index + 1}`,
      key: `col${index + 1}`,
    });
  });

  let transformedData = keys.map((key, index) => {
    let rowData: any = { key: `${index + 1}` };
    originalData.forEach((item, idx) => {
      rowData[`col${idx + 1}`] = item[key];
    });
    rowData.first = key;
    return rowData;
  });

  return { columns, data: transformedData };
}
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陀螺蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值