前言
遇到一个需求,应该挺常见但是我却没怎么遇到,也费了不少功夫也解决,记录一下。
需求很简单,是个后台管理系统项目,要做个表格,(什么,这么简单,直接组件库里面复制一下Tabel
不就完事了) 哈哈,起初我也是这么想的,项目用的是react + antd
。所以是有现成的Table
的。但是遇到的还稍微复杂一点,最下面两行是不同于其他的数据,看下图
所以难点就是:最后两行是自定义的,显示总计和评价值
实现思路
翻了一圈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
函数的强大性,根据传参可以定位到具体的某一行,某一列,然后就可以自定义渲染内容了
还是那句话,遇事不用慌,首先查文档,哈哈。
可以定位到具体的某一行,某一列,然后就可以自定义渲染内容了
还是那句话,遇事不用慌,首先查文档,哈哈。
完事~