Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
class Foo extends React.Component{
constructor( props ){
super( props );
this.handleClick = this.handleClick.bind(this);
}
沒寫的話,如果是在函式裡面呼叫 XXX 是沒問題,但如果是在 element 的 event callback 呼叫,就會出問題。
是因為 prototype chain 上面 this 的對象有差別吧?具體來說是差在哪邊?
有一些 Implicit binding 的行為
有一些 Explicit Hard Binding 的行為
於是
the event handler method loses its implicitly bound context. When the event occurs and the handler is invoked, the this value falls back to default binding and is set to undefined , as class declarations and prototype methods run in strict mode.
When we bind the this of the event handler to the component instance in the constructor, we can pass it as a callback without worrying about it losing its context.
Arrow functions are exempt from this behavior because they use lexical this binding which automatically binds them to the scope they are defined in.
請問大大,我看一些教學影片,好像都不再需要這個行為了? 都只要在將handleClick的函式,由原本的handleClick(event){ blahnblah} 轉為function expression : handleClick = (event) => { blahblah } 是因為業界還是以.bind的使用方法為主嗎@@?
兩種方法都可以,這應該是一個主觀偏好的問題
哪種比較流行我也不知道
不過使用 arrow function 之後,背後也是牽涉到
this
特殊處理的觀念因為它跟以前會寫的 anonymous function
對於
this
的處理不同所以我還是想要稍微搞清楚~