溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員分享React-010-事件處理函數的this指向問題

發布時間:2020-06-25 05:34:57 來源:網絡 閱讀:275 作者:wx5d42865f47214 欄目:編程語言

好程序員分享React-010-事件處理函數的this指向問題,區分普通函數與事件處理函數

1、普通函數是直接調用的。不存在 this 指向問題,誰調用的,this 指向就是誰。

2、普通函數沒有事件對象 event

3、事件處理函數其實也是一個函數,只是他綁定在某個事件上。

4、事件處理函數的 this 默認指向 undefined

解決this指向問題的4種辦法

1、直接在事件綁定的地方加上 .bind(this)

<button onClick={this.handleClick.bind(this)}>點我</button>

2、使用箭頭函數

<button

??onClick={event?=>?{

????this.handleClick(event);

??}}

>

??點我

</button>

3、在構造函數中統一進行this指向的綁定

??constructor() {

????super();

?

????this.handleClick?=?this.handleClick.bind(this);

??}

?

??render() {

????return?(

??????<button onClick={this.handleClick}>點我</button>

????)

??}

4、使用實驗性質的 public class fileds 語法。要去使用的話,的需要babel插件的支持.

1、安裝?@babel/plugin-proposal-class-properties babel 插件

2、 babel 的配置文件中,配置好

3、從新啟動項目

class?App?extends?React.Component?{

??handleClick?=?() =>?{

????console.log(this);

??};

}

?

為啥要使用 bind 來修改this指向,而不能使用 apply、call?

因為 apply 與 call 他們會直接執行函數,而 bind 會返回一個新的函數。

?

在調用子組件的時候,需要傳遞一個方法下去,這時這個方法的this綁定推薦使用哪幾種:

推薦使用:在構造函數中的bind 與 public class fileds 語法。

?

1、首先要知道的是,父組件render,子組件一定會render

2、我們希望如果子組件沒有發生變化,那么在 父組件render的時候,讓子組件不做render。節省性能。

3、要實現第2點,可以讓子組件繼承的是 PureComponent

4、PureComponent 。它會幫助我們計算子組件接收到的porps 有沒有發生變化,如果有那么就 render .如果沒有就阻止render

<Child onFn1={this.handleFn1.bind(this)} ?/>

// 由于 .bind() 方法每次都會返回一個新的函數,所以這種方式不推薦。。。。

?

<Child onFn1={() =>?{ this.handleFn1() }} ?/>

// 由于 每次執行到這行代碼,箭頭返回都是一個新的箭頭函數,所以這種方式不推薦

?

constructor() {

??super();

??

??this.handleFn1?=?this.handleFn1.bind(this)

}

?

<Child onFn1={this.handleFn1} ?/>

??

?// 由于 constructor 構造函數只會執行一次,后續執行到 Child 的代碼,傳遞過去的 onFn1 沒有發生變化

?// 所以這種方式推薦

?

<Child onFn1={this.handleFn1} ?/>

?

handleFn1 =?() =>?{

??...

}

??

// 這種方式同樣也推薦。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女