• Antd4 Table组件折叠收缩功能


    hi~最近应业务需求实现一个基本的订单查询类功能,分为表单搜索框和列表展示两部分,根据表单搜索查询列表接口展示数据,Form和Table组件大家估计也玩烂了。今天记录下react项目如何实现Table默认展示订单列表,且订单有父子级展示,点击父级箭头实现折叠收缩功能。

    1.去官网扒一波要用到的api:

    defaultExpandAllRows初始时,是否展开所有行
    expandedRowKeys展开的行,控制属性
    expandRowByClick通过点击行来展开子行
    onExpand点击展开图标时触发
    onExpandedRowsChange展开的行变化时触发

    根据这5个api可以实现我们的需求功能,前三个必须要使用,后2个选一个即可。

    2.接下来直接上代码小试牛刀吧~
       2.1.首先在文件里面引入antd的table组件,如下图所示:

    import { Table, Pagination } from 'antd';

      2.2.使用Table组件,主要代码:

       expandIcon={expandIcon} (修改默认的+号按钮,改为箭头展示)
       expandedRowKeys={expandedRowKeys} (控制当前点击按钮的受控状态)
       expandRowByClick (支持父级点击展示子行)

    1. <Table
    2. size="small"
    3. bordered={false}
    4. columns={columns}
    5. dataSource={tableList}
    6. loading={tableLoading}
    7. rowClassName={record => setRowClassName(record)}
    8. rowKey={record => record.id}
    9. expandIcon={expandIcon}
    10. expandedRowKeys={expandedRowKeys}
    11. expandRowByClick
    12. pagination={false}
    13. />

    2.3.修改默认的折叠图标

    官网默认的折叠图标如下图所示:

    1. const expandIcon = prop => {
    2. const { expanded, record } = prop;
    3. const { children, id } = record;
    4. if (!children || children.length === 0) {
    5. return '';
    6. }
    7. if (id) {
    8. return expanded ? (
    9. <CaretDownOutlined translate="true" style={{ cursor: 'pointer' }} />
    10. ) : (
    11. <CaretRightOutlined translate="true" style={{ cursor: 'pointer' }} />
    12. );
    13. }
    14. return '';
    15. };

    修改后的折叠图标且默认展示子行订单如下图所示:

    expandedRowKeys使用

    1. const [expandedRowKeys, setExpendRowKeys] = useState([]);
    2. useEffect(() => {
    3. const newOrderArr = list.map(item => item.id);
    4. setExpendRowKeys([...newOrderArr]);
    5. }, [list]);

    点击折叠收起来,使用api二选一,如下图所示:

    1. 第一种方法:
    2. onExpandedRowsChange={expandedRows => {
    3. setExpendRowKeys([...expandedRows]);
    4. }}
    5. 第二种方法:
    6. onExpand={(expend, record) => {
    7. if(expend) {
    8. const newOrderArr = list.map(item => item.id);
    9. setExpendRowKeys([...newOrderArr]);
    10. } else {
    11. const index = expandedRowKeys.findIndex((e) => e === record.id);
    12. const newArray = [...expandedRowKeys];
    13. newArray.splice(index, 1);
    14. setExpendRowKeys(newArray);
    15. }}}

    3.当前使用的第一种,大概实现思路就是这样,主要以expandedRowKeys控制点击箭头时状态

    1. <Table
    2. size="small"
    3. bordered={false}
    4. columns={columns}
    5. dataSource={tableList}
    6. loading={tableLoading}
    7. rowClassName={record => setRowClassName(record)}
    8. rowKey={record => record.id}
    9. expandIcon={expandIcon}
    10. expandedRowKeys={expandedRowKeys}
    11. expandRowByClick
    12. onExpandedRowsChange={expandedRows => {
    13. setExpendRowKeys([...expandedRows]);
    14. }}
    15. pagination={false}
    16. />

     Last,希望能帮助大家,越努力越幸运~

  • 相关阅读:
    ArcGIS小技巧|四种计算图斑面积的方法
    ML学习笔记--Word Embedding
    【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
    Java数组基础之高效存储数据
    备忘录APP源码和设计报告
    tcp为啥是三次握手和四次挥手
    干货 | 身份云的云原生探索与实践:从 IAM 到 IDaaS
    2022百度之星初赛第三场-三个因子
    SQL Server事务及隔离级别
    【数字电路基础】深入理解setup time和hold time
  • 原文地址:https://blog.csdn.net/Dandelion529_66/article/details/126893213