react事件綁定this的原因


1.首先是js本身特性決定的

this永遠指向最后調用它的那個對象

var name='windowName';
function a(){ 
  var name ='objName';   
  console.log(this.name)
}
a();//windowName ; this永遠指向最后調用它的對象。window.a()




var name='windowName';
var obj={
  name:'objName',
  fun1:function(){
     console.log(this.name)
  }  
}
obj.fun1();//objName : this永遠指向最后調用它的對象

2.在react事件中綁定this,來使事件的this指向當前組件,避免this的丟失

var name='windowName';
var obj={
  name:'objName',
  fun:function(){
   console.log(this.name)
  }
}
var fn = obj.fun;
fn();//windowName  這里只是將obj.fun賦值給一個變量。但是沒有調用。this永遠指向最后調用它的對象。這里還是通過window.fn();
//bind的復習
//bind() 方法創建一個新的函數,在 bind() 被調用時,這個新函數的 this 被指定為 bind() 的第一個參數,而其余參數將作為新函數的參數,供調用時使用。
var a ={
        name : "Cherry",
        fn : function (a,b) {
            console.log( a + b)
        }
    }

    var b = a.fn;
    b.bind(a,1,2)()//將b的this指向a,然后在調用bind()方法創建的函數



//react中
<Button   onClick={this.handleClick}>綁定this</Button>
//這個時候onClick就當於一個變量,它指向window。你直接調用handleClick去做一些操作的時候,比如this.setState({});這個時候this指向就會報錯。所以我們需要給react事件綁定this來方式this的丟失
//第一種是使用bind
<Button   onClick={this.handleClick.bind(this)}>綁定this</Button>
//通過bind()來把this指向的當前的組件
handleClick(){}
//使用箭頭函數
<Button   onClick={this.handleClick}>綁定this</Button>
handleClick=()=>{};//ES6 的箭頭函數是可以避免 ES5 中使用 this 的坑的。箭頭函數的 this 始終指向函數定義時的 this,而非執行時。,箭頭函數需要記着這句話:“箭頭函數中沒有 this 綁定,必須通過查找作用域鏈來決定其值,如果箭頭函數被非箭頭函數包含,則 this 綁定的是最近一層非箭頭函數的 this,否則,this 為 undefined”。

參考文獻:https://juejin.im/post/59bfe84351882531b730bac2#heading-2

https://my.oschina.net/shuaihong/blog/2990055

 


免責聲明!

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



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