ant design 實現表格選中行背景色改變

ant design 實現表格選中行背景色改變

平時開發過程中,經常遇到一個頁面上有兩個表格,構成頭行表的情況,例如:
在這裏插入圖片描述
antdesign的Table組件中默認只有鼠標移入行背景色改變效果,而在頭行表展示的時候,我們點擊頭表的某行數據,行表進行關聯展示,操作完行表之後,我們會發現我們已無法分辨剛剛我們點擊了頭行的哪條數據,所以,我們需要實現:點擊頭表的一條數據,該條數據背景色變深,即使移出鼠標,該行背景色仍然變深。

1.樣式global.less

在global.less中新加一個我們自定義的樣式,這樣所有需要該效果的頁面引入global.less即可使用該樣式,並且方便我們之後統一修改該背景色:

// 被選中的表格行的樣式
.clickRowStyl {
  background-color : #cbf2ff
}

2.初始化頭表選中信息存儲

在頁面的構造方法中初始化state,初始化一個屬性用於存儲我們點擊了頭表的哪一行。注意這是一個{},而不是[]。

constructor(props){
        super(props);
        this.state = {
            hrpFactSelectedRowData : {},  //點擊選中的事實表信息,頭表信息
        };
 }

3.實現點擊頭表將行信息存儲到state中

定義頭表的行點擊事件:

//頭錶行點擊事件
onclickFact = (record) => {
        this.setState({hrpFactSelectedRowData : record}, ()=>{//這裏可以做查詢行表的操作}); 
}

將行點擊事件綁定在Table組件上

<Table columns={factColumns} dataSource={this.props.FactList} rowKey="id" 
			bordered size="middle" scroll={{ y: 240 }}
			rowSelection={factRowSelection}
			onRow={(record) => {    //行點擊事件
				return{
					onClick: (event) => this.onclickFact(record)
				}
			}}>
</Table>

4.實現頭錶行樣式根據點擊記錄動態改變

引入global.less:(這個地方估計是能不引入就能用,現在還沒研究出來)

import global from '@/global.less'

定義動態返回樣式方法:這個方法傳入的是行數據,當state中存儲的行數據(即我們剛剛點擊了的行數據)和傳入的行數據的id一致,則返回背景色加深的樣式。

//根據是否被選中返回頭錶行的className
setSelectHrpFactRowClassName = (record) => {
       return record.id === this.state.hrpFactSelectedRowData.id? global.clickRowStyl : '';
}

將動態行樣式方法綁定到Table組件上

<Table columns={factColumns} dataSource={this.props.FactList} rowKey="id" 
			bordered size="middle" scroll={{ y: 240 }}
			onRow={(record) => {    //行點擊事件
				return{
	                onClick: (event) => this.onclickFact(record)
                }
             }}
            rowClassName={this.setSelectHrpFactRowClassName}>	//動態行樣式方法
</Table>

5.效果

這樣我們就可以實現,點擊表格的某一行,該行的顏色背景色變深,即使鼠標移開,也保留變深效果。
在這裏插入圖片描述

6.備註

  • 點擊頭表將行信息存儲到state中完全可以只保存行數據的id:
    我們state中保存的實際上是我們剛剛點擊的這一行整行的數據,其實完全可以只保存該行的id,因爲動態返回樣式方法setSelectHrpFactRowClassName 中判斷該行是不剛剛點擊的行僅使用了id進行判斷。因爲我這裏剛剛點擊的整行的數據還有其他用處,所以就保存了整行的數據。
  • global.less中的樣式名稱保持一致:
    在global.less中自定義的顏色變深的樣式的名稱,多人開發時要保持一致,這樣便於後期修改和優化,其餘的行點擊事件方法、動態返回樣式方法等可以根據各個頁面的具體意義自定義即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章