首先我們先查看官方規(guī)則或者官方文檔的介紹,React的事件處理和DOM元素很相似,但是語法上是有不同的:
1、react事件采用駝峰命名法,而不是純小寫。
駝峰命名法(camelCase):命名的全部全稱, 首個單詞全部小寫后面每個單詞的首字母大寫。
eg: getElementById onClick
2、使用JSX語法的時候需要傳入一個函數(shù)作為事件處理函數(shù), 而不是一個字符串
了解基本的以后 , 下面我們利用九個例子來進(jìn)行事件的鞏固:
1、普通匿名函數(shù)的直接綁定
<button onClick={function(){alert('直接綁定')}}>按鈕1</button>
給onClick后面直接綁定函數(shù),點(diǎn)擊以后,就會執(zhí)行函數(shù)里面的內(nèi)容。
2、使用箭頭函數(shù)代替匿名的綁定
<button onClick={()=>{
alert("點(diǎn)擊觸發(fā)匿名函數(shù)");
}}>按鈕2</button>
3、箭頭函數(shù)中獲取事件源(等同于原生的event對象)
<button onClick={(e)=>{
e.target.style.color="red";
}}>點(diǎn)擊以后按鈕就會變成紅色</button>
e就是默認(rèn)的事件參數(shù) e中的target表示事件發(fā)生的目標(biāo)元素 點(diǎn)擊以后按鈕就會變成紅色
4、將匿名函數(shù)分離封裝
<button onClick={
this.show
}>點(diǎn)擊調(diào)用外面的函數(shù)</button>
點(diǎn)擊按鈕以后 觸發(fā)外面聲明的show方法 show方法定義如下
constructor(props){
super(props);
this.state={
num:10
}
}
show(){
alert("按鈕4被點(diǎn)擊 但是里面this會脫離上下文關(guān)系");
alert(this.state.num);//報錯 this是undefined
}
可以彈框提示 , 但是會有this指向的問題 , 接下來 我們看第五步的加強(qiáng)
5、利用箭頭函數(shù) 對this指向進(jìn)行加強(qiáng) 改寫的代碼如下
<button onClick={
this.show//參數(shù)問題就看第六點(diǎn)
}>調(diào)用函數(shù)</button>
點(diǎn)擊以后num就能得到改變
6、再來研究箭頭函數(shù)中參數(shù)的問題 如果調(diào)用的時候帶走參數(shù)
<button onClick={//show6能帶參數(shù)
()=>{
this.show6("我是參數(shù)")
}
}>調(diào)用帶有參數(shù)的函數(shù)</button>
方法定義的如下 show6為一個箭頭函數(shù), content就是形參 ,接受的值為我是參數(shù)
show6=(content)=>{
alert(content);
}
7、事件函數(shù)觸發(fā)是帶參數(shù)和事件源
<button onClick={//show7能帶參數(shù) 還能帶事件源
(e)=>{
this.show7("7777",e);
}
}>帶走參數(shù)和事件源</button>
show7中第二個參數(shù)e需要特別處理, 在(e)中聲明 才能帶出去, 不然e會是沒有定義。
方法的定義部分
show7=(content,e)=>{
e.target.innerHTML= content;
}
content就是參數(shù)"7777" ,e就是事件源, 通過事件源可以找到目標(biāo)元素, 然后更新里面的內(nèi)容
8、不使用箭頭函數(shù) 使用bind加強(qiáng)(bind里面的第一個參數(shù) 表示bind前面函數(shù)聲明里面this的指向)
<button onClick={this.show8.bind(this)}>bind加強(qiáng)</button>
方法定義的地方
show8(){
alert("bind綁定");
}
9、改寫bind 貼近官方推薦寫法
<button onClick={this.show9} >bind寫法</button>
在show9定義中
constructor(props){
super(props);
this.state={
num:10
}
this.show9 = this.show9.bind(this);//bind的提升 調(diào)用的寫法和8就不一樣了
}
show9(){
alert(this.state.num);
}
總結(jié):
react中事件的使用和原生的事件使用極其相似,我們需要解決,函數(shù)函數(shù)的聲明和參數(shù)的傳遞 使用,根據(jù)自己的實(shí)際情況,合理使用就可以了,不管是箭頭函數(shù)和普通函數(shù),實(shí)際都是殊途同歸。