React事件處理和原生JS事件處理

2022-09-08 00:30:34 字數 1933 閱讀 6360

事件觸發呼叫有三種方式:

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節點的次數,從而減少瀏覽器的重載入,...