React antd Table表格动态合并单元格

注意:

① 采用的是React antDsign 4.x版本 

② 需重新处理data数据

实现效果

代码实现

import React from 'react';
import { Table } from 'antd';

const data = [
  {
    key: '0',
    name: '张三',
    age: 22,
    sex: '男',
  },
  {
    key: '1',
    name: '李四',
    age: 42,
    sex: '男',
  },
  {
    key: '2',
    name: '小丽',
    age: 22,
    sex: '女',
  },
  {
    key: '3',
    name: '小红',
    age: 31,
    sex: '女',
  },
  {
    key: '4',
    name: '赵大胆',
    age: 42,
    sex: '男',
  },
  {
    key: '5',
    name: '李建国',
    age: 62,
    sex: '男',
  },
];

const columns = [
  {
    title: '姓名',
    dataIndex: 'name',
    key: 'name',
    align: 'center',
  },
  {
    title: '性别',
    dataIndex: 'sex',
    key: 'sex',
    align: 'center',
    render(_, row) {
      return {
        children: row.sex,
        props: {
          rowSpan: row.rowSpan,
        },
      };
    },
  },
  {
    title: '年龄',
    dataIndex: 'age',
    key: 'age',
    align: 'center',
  },
];

//处理data数组
const createNewData = (data) => {
  return data
    .reduce((result, item) => {
      if (result.indexOf(item.sex) < 0) {
        result.push(item.sex);
      }
      return result;
    }, [])
    .reduce((result, sex) => {
      const children = data.filter((item) => item.sex === sex);
      result = result.concat(
        children.map((item, index) => ({
          ...item,
          rowSpan: index === 0 ? children.length : 0,
        })),
      );
      return result;
    }, []);
};

const App = () => (
  <Table
    columns={columns}
    dataSource={createNewData(data)}
    bordered
    size="small"
  />
);

export default App;

注:本人前端小白 ,如有不对的地方还请多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值