Antd 表格數(shù)據(jù)分頁(yè)加載,并且能夠跨頁(yè)選擇數(shù)據(jù)

最近在項(xiàng)目中遇到表格數(shù)據(jù)量較大的情況澳厢,所以考慮進(jìn)行分頁(yè)加載环础,并且需要能夠記錄跨頁(yè)的選項(xiàng),于是想到一種客戶端根據(jù)數(shù)據(jù)總長(zhǎng)度進(jìn)行表格數(shù)據(jù)初始化的操作剩拢,再根據(jù)頁(yè)碼進(jìn)行數(shù)據(jù)填充线得,避免一次行請(qǐng)求過(guò)多數(shù)據(jù)。
客戶端設(shè)置如下:

constructor() {
       super();
       this.columns = [
           {
               title: '序號(hào)',
               dataIndex: 'order',
               width: '20%',
           },
           {
               title: '廣告牌編號(hào)',
               dataIndex: 'device_id',
               width: '20%',
           },
           {
               title: '所屬公司',
               dataIndex: 'device_company',
               width: '20%',
           },
           {
               title: '所屬區(qū)域',
               dataIndex: 'device_region',
               width: '20%',
           },
           {
               title: '所屬路段',
               dataIndex: 'device_road',
               width: '20%',
           },
       ];
       this.state = {
           devData:[],
           selectedRowKeys: [],
           isModalShow:false,
           currentPage:1,
           loadedPages:[],   //已經(jīng)加載過(guò)的頁(yè)
           totalNum:0,
       };
   }
   componentDidMount() {
       this.getTotalNum();
   }
   getTotalNum(){
       let self=this;
       let dataSend={
           userName: CURRENT_USER,
       };
       console.log(dataSend);
       $.ajax({
           url: API_URL + "/system/data_permission/getBillboardTotal",
           type: "POST",
           data: dataSend,
           success: function (result) {
               console.log(result);
              let total=result.totalNum;
              console.log(total);
               let tableData = [];
               for (let i = 0; i <total; i++) {  //根據(jù)總長(zhǎng)度對(duì)表格數(shù)據(jù)初始化
                   tableData.push({
                       key: i,
                       order: i + 1,
                       device_id:  '',
                       device_company: '',
                       device_region: '',
                       device_road: '',
                   });
               }
               self.setState({totalNum:total,devData:tableData});
               self.getDevData(1);
           },
           error: function (error) {
               if (error.responseText) {
                   message.error(error.responseText);
               } else {
                   message.error('請(qǐng)求出錯(cuò)啦');
               }
           }
       });
   }
   getDevData(page){
       let self=this;
       if(this.state.loadedPages.indexOf(page)=== -1){  //如果某頁(yè)數(shù)據(jù)重未加載過(guò)徐伐,則發(fā)起請(qǐng)求
           let dataSend={
               userName:CURRENT_USER,
               page:page,
           };
           console.log(dataSend);
           $.ajax({
               url: API_URL + "/system/data_permission/getBillboardData",
               type: "POST",
               data: dataSend,
               success: function (result) {
                   console.log(result);
                   let data=result.data.tableData;
                   let tableData=self.state.devData;
                   let len=data.length;
                   console.log(len)
                   for (let i = 0; i <len; i++) {
                       let index=i+(page-1)*8;
                       tableData[index].key= data[i].billboardId;
                       tableData[index].device_id= data[i].billboardId;
                       tableData[index].device_company= data[i].connectCompany;
                       tableData[index].device_region= data[i].connectRegion;
                       tableData[index].device_road= data[i].connectRoad;
                   }
                   self.setState({loadedPages:self.state.loadedPages.concat(page)});
                   console.log(self.state.devData,self.state.loadedPages);
               },
               error: function (error) {
                   if (error.responseText) {
                       message.error(error.responseText);
                   } else {
                       message.error('請(qǐng)求出錯(cuò)啦');
                   }
               }
           });
       }
   }
   onTableSelectChange(selectedRowKeys) {
       console.log('selectedRowKeys changed: ', selectedRowKeys);
       this.setState({selectedRowKeys});

   }
   onPageChange(page){
       console.log(page);
       this.setState({
           currentPage: page,
       });
       this.getDevData(page);
   }
render(){
       const {selectedRowKeys} = this.state;
       const rowSelection = {
           selectedRowKeys,
           onChange: this.onTableSelectChange.bind(this),
       };
       const pagination = {
           pageSize: 8,
           total:this.state.totalNum,
           onChange:this.onPageChange.bind(this),
           current:this.state.currentPage,
       };
       const hasSelected = selectedRowKeys.length > 0;
       return (
           <div>
               <Table columns={this.columns} dataSource={this.state.devData} 
                      pagination={pagination}
                      rowSelection={rowSelection}
                      style={{
                          marginTop: 5, marginBottom: 5, marginRight: 5, marginLeft: 5
                      }}/>
           </div>
       );
   }

服務(wù)端設(shè)置如下:其中35代表數(shù)據(jù)總長(zhǎng)度,8代表客戶端中表格每頁(yè)條目數(shù)贯钩,可以根據(jù)需求修改

console.log(req.body);
    let page=req.body.page;
    let lastPage=Math.ceil(35/8);//最后一頁(yè)所在頁(yè)碼
    let lastPageLen=35%8;//最后一頁(yè)長(zhǎng)度
    console.log(lastPage);
    console.log(lastPageLen);
  if(page===lastPage.toString()&&lastPageLen!=0){//避免剛好整除的情形
        let data=[];
        for(let i=0;i<lastPageLen;i++){
            let str=(page-1)*8+(i+1);
            data.push({
                billboardId:'廣告牌'+str,
                connectCompany:'企業(yè)',
                connectRegion:'區(qū)域',
                connectRoad:'路段',
            });
        }
        let result={
            data: {
                tableData:data,
            }
        }
        res.send(result);
    }else{
        let data=[];
        for(let i=0;i<8;i++){
            let str=(page-1)*8+(i+1);
            data.push({
                billboardId:'廣告牌'+str,
                connectCompany:'企業(yè)',
                connectRegion:'區(qū)域',
                connectRoad:'路段',
            });
        }
        let result={
            data: {
                tableData:data,
            }
        }
        res.send(result);
    }


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子角雷,更是在濱河造成了極大的恐慌祸穷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓罗,死亡現(xiàn)場(chǎng)離奇詭異粱哼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)檩咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門揭措,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人刻蚯,你說(shuō)我怎么就攤上這事绊含。” “怎么了炊汹?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵躬充,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讨便,道長(zhǎng)充甚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任霸褒,我火速辦了婚禮伴找,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘废菱。我一直安慰自己技矮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布殊轴。 她就那樣靜靜地躺著衰倦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旁理。 梳的紋絲不亂的頭發(fā)上樊零,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音韧拒,去河邊找鬼淹接。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叛溢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劲适,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楷掉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起烹植,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斑鸦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后草雕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巷屿,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年墩虹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘱巾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诫钓,死狀恐怖旬昭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菌湃,我是刑警寧澤问拘,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站惧所,受9級(jí)特大地震影響骤坐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜下愈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一纽绍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驰唬,春花似錦顶岸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至搓逾,卻和暖如春卷谈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霞篡。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工世蔗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朗兵。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓污淋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親余掖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寸爆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,934評(píng)論 2 89
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,970評(píng)論 6 13
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,753評(píng)論 1 92
  • (一)旺財(cái)吃的啥 “旺財(cái),快來(lái)赁豆〗龃迹”房里傳來(lái)李叔的聲音,在這寂靜無(wú)人的街道上顯得那么明顯魔种。仿佛飛鳥劃破天空析二,李叔打破...
    Kan玖玖閱讀 547評(píng)論 9 5
  • 時(shí)間:2016 - 2- 8 書名:《荷塘夜色》 【中國(guó)】朱自清 書摘 沿著荷塘,是一條曲折的小...
    浸泡一種心情閱讀 261評(píng)論 0 0