码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Antd中Table列表行默认包含修改及删除功能的封装


    一、前言

    ant-design是非常不错、方便的一款前端组件库,而这次用到的ProComponents则是在 Ant Design 上进行了自己的封装,更加易用,与 Ant Design 设计体系一脉相承,无缝对接 antd 项目,样式风格与 antd 一脉相承,无需魔改,浑然天成。一些预设行为也达到了更少的代码,更少的 Bug的目的。

    这里我使用ProComponents的editable-table时发现它的表格默认自带了修改删除功能:

    在这里插入图片描述


    代码封装的actionRender方法提供了相应的参数来使用默认的修改删除:

    在这里插入图片描述

    自己使用的项目也有非常多的表单,大部分都包含修改删除功能,所以对我来讲也是非常实用的,但它的修改是在行内编辑,我的需要弹窗编辑,所以这里根据自己的思路封装了一下,下面分享给大家。


    文章目录

    • 一、前言
    • 二、给Table封装默认的修改、删除功能
    • 三、实现效果


    二、给Table封装默认的修改、删除功能

    整个封装过程把思路理清楚了也能很简单的实现,首先是将弹窗方法(不同功能的表单会有差异)传递给封装的公共Table:

      //弹窗方法
      const showModal = (type: string, values: any = {}) => {
        values['formType'] = type;
        setFormData(values);
        setFormVisible(true);
      };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    传递给table:

         <LimTable
            actionRef={ref}
            columns={columns}
            func={UserView}
            showModal={showModal}
            headerTitle="用户列表"
          />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后在公共Table组件中定义默认表单的操作方法(修改,删除)这里只提供思路,代码不适用于你的项目:

      //默认的表单操作dom
      const defaultColumnDom = {
        update: (record: any) => (
          <a key="update" onClick={() => showModal(PATCH, record)}>
            修改
          </a>
        ),
        delete: (record: any) => (
          <a
            key="delete"
            onClick={() => {
              deleteDataFunc(func, record.id);
            }}
          >
            删除
          </a>
        ),
      };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    然后放入设置表单操作栏的方法中:

      //设置表单options(操作栏)的方法
      const setDefualtColumnsOptions = () => {
        for (let i = 0; i < columns.length; i++) {
          if (columns[i].dataIndex === 'option') {
            if (!optionRender) {
              //没有配置optionRender则默认增加修改、删除功能
              columns[i].render = (_: any, record: any) => [
                defaultColumnDom.update(record),
                defaultColumnDom.delete(record),
              ];
            } else {
              columns[i].render = (_: any, record: any) =>
                optionRender({ update: defaultColumnDom.update(record), delete: defaultColumnDom.delete(record) }, record);
            }
            break;
          }
        }
      };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    最后加入useEffect中即可完成:

     useEffect(() => {
        setDefualtColumnsOptions();
      }, []);
    
    • 1
    • 2
    • 3

    三、实现效果

    当我们不传递optionRender时,列表默认携带修改、和删除功能:
    在这里插入图片描述


    当我们传递了optionRender时,列表根据传递的渲染操作栏:

    只包含修改功能

          <LimTable
            actionRef={ref}
            columns={columns}
            func={UserView}
            optionRender={(dom: any) => [dom.update]}
            showModal={showModal}
            headerTitle="用户列表"
          />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述


    包含修改功能并附加文字:

          <LimTable
            actionRef={ref}
            columns={columns}
            func={UserView}
            optionRender={(dom: any) => [dom.update, '曲鸟']}
            showModal={showModal}
            headerTitle="用户列表"
          />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述


    这样我们又封装好了一个组件了,减少了后面编码的重复性工作,也间接减少了BUG的产生。

  • 相关阅读:
    小程序用户体系全攻略:openid和code的神秘连接,快速实现登录功能!告别繁琐的账号密码验证!
    大学里遗憾的事,希望你无怨也无悔
    css之 vertical-align用法详解
    Spark(1)-wordCount入门
    JavaScript 运算符【‘算术运算符’,‘赋值运算符’,‘一元运算符’,‘比较运算符’,‘逻辑运算符’,‘运算符优先级’】 详解和配案例 开发当中很重要
    Ansible最佳实践之委派任务和事实
    一幅长文细学Spring(二)——IOC
    java计算机毕业设计web网上办公自动化系统MyBatis+系统+LW文档+源码+调试部署
    SAM + 用于文本到图像修复的稳定扩散
    周赛372(正难则反、枚举+贪心、异或位运算、离线+单调栈)
  • 原文地址:https://blog.csdn.net/momoda118/article/details/127995864
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号