React事件繫結幾種方法測試

2021-08-30 02:30:42 字數 1315 閱讀 3776

前提

es6寫法的類方法預設沒有繫結this,不手動繫結this值為undefined。

因此討論以下幾種繫結方式。

一、建構函式constructor中用bind繫結

constructor (props)

// this.bind1 = this.bind1.bind(this) 無參寫法

this.bind1 = this.bind1.bind(this, this.state.t)

} // 無參寫法

// bind1 ()

bind1 (t, event)

render () }

二、在呼叫的時候使用bind繫結this

bind2 (t, event) 

render ()

// 無參寫法同第一種

三、在呼叫的時候使用箭頭函式繫結this

bind3 (t, event) 

render () >列印3 無參寫法

this.bind3(this.state.t, event)}>列印3

)}四、使用屬性初始化器語法繫結this

bind4 = () =>

render ()

附加::方法(不能帶參,stage 0草案中提供了乙個便捷的方案——雙冒號語法)

bind5()

render()

方法一優缺點

優點:只會生成乙個方法例項;

並且繫結一次之後如果多次用到這個方法也不需要再繫結。

缺點:即使不用到state,也需要新增類建構函式來繫結this,**量多;

新增引數要在建構函式中bind時指定,不在render中。

方法二、三優缺點

優點:寫法比較簡單,當元件中沒有state的時候就不需要新增類建構函式來繫結this。

缺點:每一次呼叫的時候都會生成乙個新的方法例項,因此對效能有影響;

當這個函式作為屬性值傳入低階元件的時候,這些元件可能會進行額外的重新渲染,因為每一次都是新的方法例項作為的新的屬性傳遞。

方法四優缺點

優點:建立方法就繫結this,不需要在類建構函式中繫結,呼叫的時候不需要再作繫結;

結合了方法

一、二、三的優點。

缺點:帶參就會和方法三相同,這樣**量就會比方法三多了。

總結方法一是官方推薦的繫結方式,也是效能最好的方式。

方法二和方法三會有效能影響,並且當方法作為屬性傳遞給子元件的時候會引起重新渲染問題。

大家根據是否需要傳參和具體情況選擇適合自己的方法就好。

React事件繫結幾種方法測試

es6寫法的類方法預設沒有繫結this,不手動繫結this值為undefined。因此討論以下幾種繫結方式。constructor props this.bind1 this.bind1.bind this 無參寫法 this.bind1 this.bind1.bind this,this.stat...

React學習之事件繫結的幾種方法對比

前言 react事件繫結 由於類的方法預設不會繫結this,因此在呼叫的時候如果忘記繫結,this的值將會是undefined。通常如果不是直接呼叫,應該為方法繫結this。繫結方式有以下幾種 1.在建構函式中使用bind繫結this class button extends react.compo...

React事件繫結的幾種方式對比

class button extends react.component handleclick render click me button class button extends react.component render click me button class button exten...