在react中,通過點選選中元件的兩種情況
想要通過點選元件,來進行元件選中與未選中狀態的變換,可以分為兩種情況,一種是點選哪一項該項選中,其他項不變,即為唯一選中;另一種是點選一項後,再點選其他項,會選中多項,再次點選已選中項會取消選中狀態。
下面來分別看一下在react中的兩種實現手法,基本思路都是通過state來控制選擇項,通過三元運算子來進行元件樣式的變換。
第一種,唯一選中:
先在model檔案中寫state,state裡設定一個變數來標識當前選中項
namespace: 'InfoOverview',
state: {
longLineState: 1, //唯一標識當前項
},
在元件檔案中,連線model後,先為每一項元件建立唯一標識ID,再根據ID與longLineState判斷值來進行元件樣式的變換。
const {InfoOverview, dispatch, longLineID} = this.props; let { longLineState } = InfoOverview; const changeLong =(longLineID) => { dispatch({ type: 'InfoOverview/upState', payload: { longLineState: longLineID, } }) }; return ( <div className={longLineState === longLineID ? styles.longLineBox2 : styles.longLine} onClick={() => changeLong(longLineID)} >...</div>
這樣,每一次點選就會將當前項ID置為longLineState,ID與longLineState相等時呈現選中樣式,ID與longLineState不等時呈現原樣式不變,這樣就實現了唯一選中的效果。
第二種:多項選中,可取消選中:
思路相差不多,先在model檔案中寫state,state裡設定一個數組來標識當前選中項們
namespace: 'InfoOverview',
state: {
longLineState: [1,2], //標識當前選中項,此時為第一項和第二項被預設選中
},
元件檔案連線model後,通過判斷陣列中是否包含某項ID來為它設定樣式,某項被點選時,如果它被包含於陣列,則表明它已被選中,所以我們要將他從陣列中刪除來取消選中狀態;如果它不在陣列中,則我們要在陣列中新增它來使它處於選中狀態。
const {InfoOverview, dispatch, longLineID} = this.props;
let { longLineState } = InfoOverview;
const checkItem = longLineState.indexOf(longLineID);
const changeLong =(longLineID) => {
checkItem > -1 ? longLineState.splice(checkItem, 1): longLineState.push(longLineID);
dispatch({
type: 'InfoOverview/upState',
payload: {
longLineState: longLineState,
}
})
};
return (
<div
className={checkItem > -1 ? styles.longLineBox2 : styles.longLine}
onClick={() => changeLong(longLineID)}
>...</div>
陣列中的元件項ID即為選中項,沒有ID的元件項即為未選中項。
另外,提一句滑鼠懸浮在元件上時樣式變換寫法:
原樣式:
.longLine {
height: 38px;
width: 90%;
border: 1px solid rgba(143, 182, 239, 1);
border-radius: 27px;
text-align: center;
margin-left: auto;
margin-right: auto;
line-height: 38px;
font-size: 16px;
margin-top: 20px;
margin-bottom: 20px;
.longLineImg {
height: 26px;
width: 26px;
}
.longLineText {
text-align: left;
color:rgb(102, 153, 255);
}
.longLineNum {
color: rgb(255, 153, 0);
}
}
懸浮樣式:
.longLine:hover {
background-color: rgba(143, 182, 239, 1);
.longLineText {
color:white;
}
.longLineNum {
color: white;
}
}
只需要改寫變動的樣式即可,其他樣式會自動沿用。
相關推薦
在react中,通過點選選中元件的兩種情況
想要通過點選元件,來進行元件選中與未選中狀態的變換,可以分為兩種情況,一種是點選哪一項該項選中,其他項不變,即為唯一選中;另一種是點選一項後,再點選其他項,會選中多項,再次點選已選中項會取消選中狀態。 下面來分別看一下在react中的兩種實現手法,基本思路都是
WPF 平板上按鈕點選不觸發,滑鼠點選觸發的兩種解決方法
原文: WPF 平板上按鈕點選不觸發,滑鼠點選觸發的兩種解決方法 今天執行在windows平板上的程式,有個功能是彈出子窗體,點彈出窗體的關閉按鈕,要點好幾次才能觸發。網上找了找,也有人與我類似的情形。 解決方法如下: public static void DisableWPFTabletSupp
【React Native】React Native中DrawerLayoutAndroid通過點選實現展開和關閉
React Native中,DrawerLayoutAndroid元件與Android原生開發中的DrawerLayout一樣實現側滑選單的效果。通過手勢左右滑動實現拉出與退出的操作,但是需要通過點選圖示或者文字就能彈出側滑選單該怎麼做呢? 這時就需要
spannablestring用在fragment中,設定點選監聽無效
主要程式碼如下 @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCr
robot framework程式執行過程中,遇到點選事件之後,未出現點選之後的效果(求解)
1.click Element操作,在實際過程中偶然會出現,日誌顯示已點選成功,但是實際自動化頁面,沒有點選成功之後的操作 現象: 現象描述:程式執行到點選側邊欄的【人員資訊】之後,日誌顯示已經點選成功,但是報錯截圖可以看到並沒有相對應點選成功之後,出現的人員資訊頁面,故判斷找不到開啟頁面 測試中其他的
動態表格,通過點選按鈕增加或者刪除一行表格!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE>
iOS中如何通過點選UITableViewCell中的Button來獲取當前Cell的indexPath
- (void) btnOnClickTouched:(UIButton *)aButton { myTableViewCell* myCell = (myTableViewCell *)[aButton superView]; //表示Button新增在了Cell中。 //如果將Button新增在myCe
在Activity中響應ListView內部按鈕的點選事件的兩種方法!!! 在Activity中響應ListView內部按鈕的點選事件的兩種方法
轉載:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群裡面有人問到一個問題:如何在Activity中響應ListView內部按鈕的點選事件,不要在Adapter中響應? 對於這個問題,我最初給他的解答是,在Adapter中定義
《Java》Java“字串操作”實際應用——形成GBK編碼和UTF-8編碼的文字檔案,通過其二進位制資料觀察兩種編碼的不同
一、任務目標 完成一個java application應用程式,可以把GBK編碼的漢字字串與UTF-8編碼的漢字字串相互轉換。並配合寫檔案操作形成不同編碼格式的文字檔案,可以通過其二進位制資料觀察兩種編碼的不同。 二、程式設計思路 博主將“程式設計思路”以流程
RecyclerView(一)點選事件的兩種方式
recyclerview自身不帶有點選事件的回撥,以下實現recyclerview點選事件的兩種方式 1、通過介面回撥的方式: 直接上程式碼加註釋 1、首先定義點選的介面 public interface OnItemClickListener
web安全:防範點選劫持的兩種方式
防範點選劫持的兩種方式 什麼點選劫持?最常見的是惡意網站使用 <iframe> 標籤把我方的一些含有重要資訊類如交易的網頁嵌入進去,然後把 iframe 設定透明,用定位的手段的把一些引誘使用者在惡意網頁上點選。這樣使用者不知不覺中就進行了某些不安全的操作。 有兩
【easyUI】取消easyui行點選選中事件,智慧通過勾選checkbox才能選中行
背景:專案中使用easyui作為前端架子。datagrid預設是點選行就選中此行然後變色。 需求:點選行不讓此行選中;只能通過點選複選框才能選中某一行。 解決思路: 1、寫點選行函式function onClickRow(rowIndex,rowData){} 2、查詢當前datagrid所有
js迴圈遍歷ul中li的點選事件,給給選中li新增css
功能:對於一個ul中固定的li個數,當點選其中一個li時,改變選中li的顏色;同時改變對應的另一個ul中li的顏色頁面初始化的介面:HTML: <div > <label>其他推薦:</lab
C++實現WebBrowser控制元件中對滑鼠點選事件的監聽,並獲取所點選標籤的超連結
主要步驟如下: 1、接收網頁事件(參考資料) 要響應網頁事件,需要實現IDispatch介面,並在其Invoke()方法中處理收到的訊息。對於MFC,因為CCmdTarget類已經實現了該介面,所以只需要繼承CCmdTarget並結合相關巨
Listview、RecyclerView中的item中包含可以點選的控制元件,點選衝突解決辦法
在item的根佈局中新增: android:descendantFocusability="blocksDescendants" 可點選的子item新增 android:focusable="f
Java中的事件處理—通過點選不同的按鈕,讓面板的背景色發生變化
package com.event; import java.awt.*; import javax.swing.*; import java.awt.event.*; //Java事件處理 p
製作login.jsp頁面,要求實現提供使用者登陸的介面, 使用者通過該介面輸入使用者名稱(控制元件名userName)和密碼(控制元件名password), 然後點選“登入”按鈕實現登陸操作.
例題: 1.製作login.jsp頁面,要求實現提供使用者登陸的介面, 使用者通過該介面輸入使用者名稱(控制元件名userName)和密碼(控制元件名password), 然後點選“登入”按鈕實現登陸操作. 2.製作welcome.jsp頁面,要求在該
平移動畫,點選某個控制元件讓一個view收縮到右邊螢幕,再點選展開。
最近做了一個需求。就是點選一個箭頭 ,讓一個view收縮到右邊螢幕,再點選這個View展開,其實看是收縮,其實是平移,讓這個View平移View.getWidth的寬度,同時把這個View的座標也平移過去(不平移座標,點選監聽會還在原來的位置),再讓這個View平移 —View.getW
tabulator預設選中,設定點選當前選中項不取消選擇
tabulator預設選中,設定點選當前選中項不取消選擇 $("#table").tabulator({ height:"92%", layout:"fitColumns", columnVertAlign:"bottom", tooltips:true
Android短視訊開發中通過點選進行的命令操作所需原始碼合集
在短視訊操作中,“點選識別命令”的操作是非常常見的,幾乎一切命令都需要靠使用者點選來實現,因此,在Android短視訊開發中,雙擊點贊,點選評論、關注、分享,點選頭像進入主頁功能都是最常見的功能。 接下來,我將從程式碼的角度為大家展現這些功能的實現方式: 【雙擊點贊】通過此