react的每個方法為什么一定要bind this


一開始學習react的時候就了解了react的每個方法都要bind(this)或者使用箭頭函數綁定this的指向,到底是為什么要這么寫呢,當時要學習的東西太多了就沒在意,今天特別好奇(不搞懂不吃飯的態度),就深入學習一下

SyntheticEvent是個什么東西

react官網有一節介紹了SyntheticEvent,大家可以去官網了解一下,我也就是簡單了解了一下,dom樹上綁定事件是耗性能的,一個頁面,如果你在dom節點上綁了很多事件,但是用戶就點了幾個按鈕,那其他事件綁上去豈不是浪費了?
react就考慮到了這一點,你在render里綁定的事件並不是真的綁在真實dom上的(綁在虛擬dom上),而是在document這個根節點上綁了個SyntheticEvent,當用戶點擊的時候事件冒泡到document上,SyntheticEvent收到后再在真實dom上通過
回調(回調是重點)執行你在render上綁定的事件。
當然SyntheticEvent還解決了瀏覽器兼容性的問題。

this的指向

<button onClick={this.add}>add</button>

一個button綁定了組件中(this中)一個叫add的方法,前面說了SyntheticEvent被觸發時是回調this里面的add方法,也就是說執行add方法並不是當前組件這個this,自然add方法里也獲取不到當前組件這個this了,所以需要你自己去綁定上去啦。
回調可能還有些不理解,這里有個例子

class Cat {
 sayThis () {
 console.log(this); // 這里的 `this` 指向誰?
  }

 exec (cb) {
 cb();
  }

 render () {
 this.exec(this.sayThis);
  }
}

const tom = new Cat();
tom.render(); // 輸出結果是什么?

網上抄的例子,大家看一下例子應該明白了什么叫回調會改變this了

以上就是本人對react事件綁定的一些見解,如有不對的地方,希望各路大神能提出來,讓小弟能漲漲見識


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM