基于antd的Table写了一个可扩展列表格

在一些情景下,当Table需要展现的Columns过多时,单纯的滚动条已经无法满足用户的交互体验,此时可能更需要如图所示的可扩展列表格
在这里插入图片描述

代码如下,只是一个简单的demo,可根据具体场景打磨细节

import "./styles.css";
import "antd/dist/antd.css";
import * as React from "react";
import { Table, Checkbox, Button, Modal } from "antd";
const { useState, useEffect } = React;
const CheckboxGroup = Checkbox.Group;

export default function App() {
  const [visible, setVisible] = useState<boolean>(false);
  const [dataList, setDataList] = useState<any[]>([]);
  const [checkList, setCheckList] = useState<string[]>([]);
  const [curCheckList, setCurCheckList] = useState<string[]>([]);
  const [checkOptions, setCheckOptions] = useState<string[]>([]);
  const [extendColumnsList, setExtendColumnsList] = useState<any[]>([]);
  useEffect(() => {
    let checkOptions = ["key4", "key5", "key6", "key7", "key8"];
    let dataList = Array.from(new Array(15)).map((item, index) => {
      return {
        name: `可扩展列${index + 1}`,
        key1: `${index + 1}行的value1`,
        key2: `${index + 1}行的value2`,
        key3: `${index + 1}行的value3`,
        key4: `${index + 1}行的value4`,
        key5: `${index + 1}行的value5`,
        key6: `${index + 1}行的value6`,
        key7: `${index + 1}行的value7`
      };
    });
    setDataList(dataList);
    setCheckOptions(checkOptions);
  }, []);
  const extendColumsChange = () => {
    let extendColumnsList = checkList.map((item) => {
      return { title: item, dataIndex: item, key: item };
    });
    setCurCheckList(checkList);
    setExtendColumnsList(extendColumnsList);
    setVisible(false);
  };
  return (
    <div className="App">
      <div style={{ width: "100%", marginBottom: "20px", overflow: "hidden" }}>
        <Button
          style={{ float: "right" }}
          type={"ghost"}
          onClick={() => {
            setVisible(true);
          }}
        >
          可扩展列
        </Button>
      </div>
      <Table
        dataSource={dataList}
        columns={[
          { title: "name", dataIndex: "name", key: "name" },
          { title: "key1", dataIndex: "key1", key: "key1" },
          { title: "key2", dataIndex: "key2", key: "key2" },
          { title: "key3", dataIndex: "key3", key: "key3" },
          ...extendColumnsList
        ]}
      />
      <Modal
        title={"可扩展列"}
        visible={visible}
        onCancel={() => {
          setVisible(false);
          setCheckList(curCheckList);
        }}
        onOk={extendColumsChange}
      >
        <CheckboxGroup
          options={checkOptions}
          value={checkList}
          onChange={(value) => setCheckList(value)}
        />
      </Modal>
    </div>
  );
}

点击此处,跳转至codesandboox,可在线调试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值