在antd的table中内嵌分页按钮

Posted webchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在antd的table中内嵌分页按钮相关的知识,希望对你有一定的参考价值。

内嵌分页按钮的本质是在最后一行添加特别属性的对象。同时合并该行 列。

效果图是这样的:

点击加载更多,即向后台重新获取数据:

antd版本号: 2.9.0

代码及思路:动态创建columns方法中

 
   
   
 
  1.    //创建column

  2.    createColumns(datasCol, param ,) {

  3.        let that = this,ele,column=[];

  4.        let {dreducer, daction,tableDatas,} = this.props;

  5.        //表格列是'循环'动态生成的,同时后面还单独添加了'操作'列,所以在这里,不渲染有new属性的列

  6.        column = datasCol.map((item, key) => {

  7.                let option

  8.                option = {

  9.                    render(text, record, index) {

  10.                      //如果行对象有new属性,则不渲染

  11.                      if(record.new){

  12.                        return {

  13.                          children: "",

  14.                          //单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染

  15.                          props: {colSpan: 0,}

  16.                        }

  17.                      }

  18.                      else{

  19.                        return <span>{text}</span>

  20.                    }

  21.                    }

  22.                }

  23.                return option;

  24.            })

  25.            //单独添加操作列

  26.            if(datasCol.size>0){

  27.                column = column.push({

  28.                    title: '操作',

  29.                    ...          

  30.                    render(text, record, index) {

  31.                        //重点,在操作列中合并行

  32.                        if(record.new){

  33.                          let datalength=dreducer.get("datalength")

  34.                          let total=dreducer.get("total")

  35.                          return {

  36.                            children: <div style={{display:"", cursor: 'pointer', height: '20px', lineHeight: '20px', textAlign: 'center',

  37.                             color:"#A0A0A0",fontWeight: '700', fontSize: '14px'}}

  38.                              //单击以加载数据

  39.                               onClick={()=>{that.changeDatas(param)}}>

  40.                            {total===0?"没有数据显示":(datalength===0?"数据加载中...":(datalength<total?"加载更多":"已加载全部数据"))}</div>,

  41.                            props: {

  42.                              //重要!合并行

  43.                              //因为datasCol不包括操作列,所以要加一

  44.                              colSpan: datasCol.size+1,

  45.                            }

  46.                          }

  47.                        }else

  48.                        if (xxxxx) {

  49.                         xxxxxx

  50.                        }  

  51.                    }

  52.                })

  53.            }

  54.        xxxxx

  55.    }

render()中:

 
   
   
 
  1.  //判断时候是最后一行,如果是则选择"加载更多"应有的样式,反之则选择数据行应有的样式

  2. let classname = (record,index) => {

  3.       if(index===dataSource.length-1){

  4.         return 'loadStyle'

  5.       }else{

  6.         return 'tableStyle'

  7.       }

 
   
   
 
  1. //获取表格数据的最后一行数据,如果该数据存在且没有new属性,那我们就在最后加一个有new属性的对象,来代表"加载更多"。

  2. let lastData=dataSource[dataSource.length-1]

  3. if(lastData!==undefined&&!('new' in lastData)){

  4.    dataSource.push({new:1})

  5. }

 
   
   
 
  1. <Table

  2.            //表格数据

  3.            dataSource={dataSource}

  4.            //表格列名

  5.            columns={columns}

  6.            //行的类名

  7.            rowClassName={classname}

  8.            //单击行事件

  9.            onRowClick={(record, index, event) =>{

  10.                //如果是最后一行数据即"加载更多",不执行该事件

  11.                if(index!==dataSource.length-1)

  12.                  this.clickRow(record, index,event,dataSource.length)}}

  13.            //双击行事件

  14.            onRowDoubleClick={(record, index, event) =>{

  15.                //如果是最后一行数据即"加载更多",不执行该事件

  16.                if(index!==dataSource.length)

  17.                  this.doubleClickRow(record, index, event)}}

  18.                />

  19. }

补充: 1、如果你的组件是复用的,且里面包含table,需要判断在哪些情况下显示'加载更多',哪些情况下不显示。 2、在table中内嵌加载更多,在'加载更多'行需要禁用 单击、双击行事件。

(完)


以上是关于在antd的table中内嵌分页按钮的主要内容,如果未能解决你的问题,请参考以下文章

React —— antd Table组件 分页Pagination

STC单片机Keil C代码中内嵌汇编代码段示例

react antd Form 切换Table分页后Table内Input数据丢失问题处理

java中内嵌浏览器怎么用

在当前网页中内嵌一个网页框架

WinForm中内嵌WebBroswer