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

打印 上一主题 下一主题

主题 1025|帖子 1025|积分 3075

注意:
  ① 采用的是React antDsign 4.x版本 
  ② 需重新处理data数据
  实现效果


代码实现

  1. import React from 'react';
  2. import { Table } from 'antd';
  3. const data = [
  4.   {
  5.     key: '0',
  6.     name: '张三',
  7.     age: 22,
  8.     sex: '男',
  9.   },
  10.   {
  11.     key: '1',
  12.     name: '李四',
  13.     age: 42,
  14.     sex: '男',
  15.   },
  16.   {
  17.     key: '2',
  18.     name: '小丽',
  19.     age: 22,
  20.     sex: '女',
  21.   },
  22.   {
  23.     key: '3',
  24.     name: '小红',
  25.     age: 31,
  26.     sex: '女',
  27.   },
  28.   {
  29.     key: '4',
  30.     name: '赵大胆',
  31.     age: 42,
  32.     sex: '男',
  33.   },
  34.   {
  35.     key: '5',
  36.     name: '李建国',
  37.     age: 62,
  38.     sex: '男',
  39.   },
  40. ];
  41. const columns = [
  42.   {
  43.     title: '姓名',
  44.     dataIndex: 'name',
  45.     key: 'name',
  46.     align: 'center',
  47.   },
  48.   {
  49.     title: '性别',
  50.     dataIndex: 'sex',
  51.     key: 'sex',
  52.     align: 'center',
  53.     render(_, row) {
  54.       return {
  55.         children: row.sex,
  56.         props: {
  57.           rowSpan: row.rowSpan,
  58.         },
  59.       };
  60.     },
  61.   },
  62.   {
  63.     title: '年龄',
  64.     dataIndex: 'age',
  65.     key: 'age',
  66.     align: 'center',
  67.   },
  68. ];
  69. //处理data数组
  70. const createNewData = (data) => {
  71.   return data
  72.     .reduce((result, item) => {
  73.       if (result.indexOf(item.sex) < 0) {
  74.         result.push(item.sex);
  75.       }
  76.       return result;
  77.     }, [])
  78.     .reduce((result, sex) => {
  79.       const children = data.filter((item) => item.sex === sex);
  80.       result = result.concat(
  81.         children.map((item, index) => ({
  82.           ...item,
  83.           rowSpan: index === 0 ? children.length : 0,
  84.         })),
  85.       );
  86.       return result;
  87.     }, []);
  88. };
  89. const App = () => (
  90.   <Table
  91.     columns={columns}
  92.     dataSource={createNewData(data)}
  93.     bordered
  94.     size="small"
  95.   />
  96. );
  97. export default App;
复制代码
注:本人前端小白 ,如有不对的地方还请多多指教


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表