给antd的Table组件添加总计和平均值

1,727 阅读2分钟

前言

遇到一个需求,应该挺常见但是我却没怎么遇到,也费了不少功夫也解决,记录一下。

需求很简单,是个后台管理系统项目,要做个表格,(什么,这么简单,直接组件库里面复制一下Tabel不就完事了) 哈哈,起初我也是这么想的,项目用的是react + antd。所以是有现成的Table的。但是遇到的还稍微复杂一点,最下面两行是不同于其他的数据,看下图

antd_table1.png 所以难点就是:最后两行是自定义的,显示总计和评价值

实现思路

翻了一圈antd的文档,发现并没有自定义底部的配置,只有自定义表头,就在我准备放弃,跟产品说实现不了的时候,突然发现了Column的配置项里面的render属性,里面是这样介绍的:

生成复杂数据的渲染函数,参数分别为当前行的值,当前行数据,行索引,@return 里面可以设置表格行/列合并

额,咋一看好像也不符合,但是前面的几个字,生成复杂数据 ,好像有点搞头,冥想了一会后好像有点点思路了:

用index判断行数,再用key判断列数,这样在最后两行的时候根据当前的key值去手动渲染需要的数据

代码

知道思路后挺简单的,就是在render函数里面做判断,看注释吧

 render() {
      const getColumns = () => {
        // columns比较长,这里就不贴出来了,注意每项要有个唯一标识key
      columns.map(column => {
        column.render = (text, record, index) =>{
          if(column.key === 'statDate') { // 第一列,因为第一列是固定的文案
            if(index === tableData.length - 2) { //倒数第二行
              return <strong>总计</strong>
            } else if(index === tableData.length - 1) { //倒数第一行
              return <strong>平均值</strong>
            }else  {
              return text
            }
          } else {
            if(index === tableData.length - 2) {
              return <strong>{这里写总计}</strong>
            } else if(index === tableData.length - 1) {
              return <strong>{这里写平均值}</strong>
            }  else  {
              return text
            }
          }
​
        }
      })
      return columns
    }
 }

总结

利用render函数的强大性,根据传参可以定位到具体的某一行,某一列,然后就可以自定义渲染内容了

还是那句话,遇事不用慌,首先查文档,哈哈。

完事~