91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2020-06-25 05:34:57 來源:網絡 閱讀:248 作者: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

4PureComponent 。它會幫助我們計算子組件接收到的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

盐城市| 新邵县| 乌鲁木齐市| 盘锦市| 德钦县| 河北区| 尉犁县| 新邵县| 庆元县| 定远县| 右玉县| 桐梓县| 荣昌县| 洪江市| 濮阳县| 城步| 葫芦岛市| 达州市| 华亭县| 岱山县| 云南省| 涞水县| 永康市| 夏邑县| 汝阳县| 洛阳市| 汶上县| 莱州市| 象州县| 和平县| 奉新县| 上虞市| 交城县| 科尔| 天柱县| 同德县| 昂仁县| 临颍县| 特克斯县| 饶河县| 和静县|