事件觸發呼叫有三種方式:
1. on[event]事件屬性,手動觸發 ❗️on[event]事件是window物件上的方法。
2. on[event]事件屬性,通過htmlelement.click()模擬觸發
3. addeventlistener監聽事件,手動觸發
this指向
如果onevent事件屬性定義的時候將this作為引數,在函式中獲取到該引數是dom物件。用該方法可以獲取當前dom。
在方法中直接訪問this, this指向當前函式所在的作用域。或者說呼叫函式的物件。
<body
>
<
input
type
="checkbox"
id="root"
onmouseover
="toclick(this,event)"
onclick
="add()"
/>
<
button
onclick
="a.test(this)"
>test
button
>
<
script
>
function
toclick(argthis,e)
function
add(arg)
const a
= }
const rootele
=document.getelementbyid(
"root");
rootele.addeventlistener(
'click',
function
() )
script
>
body
>
事件觸發呼叫方式:
1. 事件屬性。on[event]觸發,注意reactjs中使用小駝峰命名,這點和原生js不同。
2. click()模擬觸發。注意模擬觸發和事件監聽都要求dom載入完畢。
3. 監聽事件觸發。addeventlistener
this指向:
react中this指向一般都期望指向當前元件,如果不繫結this,this一般等於undefined。
繫結this的方法有三種:
箭頭函式;本質上是在建構函式中進行了繫結;
在事件屬性定義的時候使用.bind(this, ...params)(不推薦,因為每次執行,會生成乙個新函式)
在建構函式中手動繫結,只需要繫結一次。
原生js中事件物件是原生事件物件,它存在瀏覽器相容性,需要使用者自己處理各瀏覽器相容問題。
reactjs中的事件物件是react將原生事件物件(event)進行了跨瀏覽器包裝過的合成事件(syntheticevent)。
合成事件物件的特點:
1)在事件處理函式中,可以正常訪問事件屬性。
2)為了效能考慮,執行完後,合成事件的事件屬性將不能再訪問。
非同步處理函式中,訪問不到合成事件的屬性。
因為執行非同步函式的時候,事件處理函式的上下文消失。
示例:
handleclick = (event) =>, 0);//不起作用,this.state.clickevent 的值將會只包含 null
this
.setstate();
//你仍然可以匯出事件屬性
this
.setstate();
}
想要在非同步函式中繼續使event屬性可訪問,需要使用event.persist();
handleclick = (event) =>, 0);this
.setstate();
this
.setstate();
}
react 事件處理
1.所有的事件以駝峰式命名如onclick 2.this作用域的問題,直接使用箭頭函式可以將該類的例項物件傳遞過去 若是呼叫的元件方法,需要使用this.handleclick this.handleclick.band this 這句話會建立乙個新的函式給handleclick,並把this當做引...
react事件處理
採用on 事件名的方式來繫結乙個事件,注意,這裡和原生的事件是有區別的,原生的事件全是小寫onclick,react裡的事件是駝峰onclick,react的事件並不是原生事件,而是合成事件。和普通瀏覽器一樣,事件handler會被自動傳入乙個event物件,這個物件和普通的瀏覽器event物件所包...
原生js事件委託
之前面試的時候就被問過,什麼是事件委託?事件委託 給父元素繫結事件,用來監聽子元素的冒泡事件。也就是事件目標 子元素 不處理事件,把事件委託給父元素去處理。看下圖理解事件冒泡 事件委託的好處 不需要對每乙個子元素繫結事件,只需要在父元素上繫結事件,減少了操作dom節點的次數,從而減少瀏覽器的重載入,...