首頁  >  文章  >  web前端  >  詳解react關於事件綁定this的四種方式

詳解react關於事件綁定this的四種方式

亚连
亚连原創
2018-05-31 15:54:161735瀏覽

這篇文章主要介紹了詳解react關於事件綁定this的四種方式,現在分享給大家,也給大家做個參考。

在react元件中,每個方法的上下文都會指向該元件的實例,即自動綁定this為當前元件,而且react也會對這種引用進行緩存,以達到cpu和記憶體的最大化。在使用了es6 class或純函數時,這種自動綁定就不存在了,我們需要手動實現this的綁定

React事件綁定類似於DOM事件綁定,區別如下:

1.React事件的用駝峰法命名,DOM事件事件命名是小寫

2.透過jsx,傳遞一個函數作為event handler,而不是一個字串。

3.React事件不能透過傳回false來阻止預設事件,需要明確呼叫preventDefault()

如下實例:

<a href="#" onclick="console.log(&#39;The link was clicked.&#39;); return false">
Click me
</a>

class ActionLink extends React.Component {
constructor(props) {
super(props);
}

handleClick(e) {
e.preventDefault();
console.log(&#39;The link was clicked.&#39;);
}

render() {
return (
<a href="#" onClick={this.handleClick.bind(this)}>Click Me...</a>
);
}

}

ps:React元件類別的方法沒有預設綁定this到元件實例,需要手動綁定。

以下是幾個綁定的方法:

bind方法

#直接綁定是bind(this)來綁定,但是這樣帶來的問題是每一次渲染是都會重新綁定一次bind;

class Home extends React.Component {

 constructor(props) {
  super(props);
  this.state = {
  };
 }

 del(){
  console.log(&#39;del&#39;)
 }

 render() {
  return (
   <p className="home">
    <span onClick={this.del.bind(this)}></span>
   </p>
  );
 }
}

構造函數內綁定

在建構函式constructor 內綁定this,好處是只需要綁定一次,避免每次渲染時都要重新綁定,函數在別處複用時也無需再次綁定

class Home extends React.Component {

 constructor(props) {
  super(props);
  this.state = {

  };
  this.del=this.del.bind(this)
 }

 del(){
  console.log(&#39;del&#39;)
 }

 render() {
  return (
   <p className="home">
    <span onClick={this.del}></span>
   </p>
  );
 }
}

::不能傳參參

如果不傳參數使用雙冒號也是可以

class Home extends React.Component {

 constructor(props) {
  super(props);
  this.state = {

  };
 }

 del(){
  console.log(&#39;del&#39;)
 }

 render() {
  return (
   <p className="home">
    <span onClick={::this.del}></span>
   </p>
  );
 }
}

箭頭函式綁定

箭頭函數不僅是函數的'語法糖',它還自動綁定了定義此函數作用域的this,因為我們不需要再對它們進行bind方法:

class Home extends React.Component {

 constructor(props) {
  super(props);
  this.state = {

  };

 }

 del=()=>{
  console.log(&#39;del&#39;)
 }

 render() {
  return (
   <p className="home">
    <span onClick={this.del}></span>
   </p>
  );
 }
}

上面是我整理給大家的,希望未來會對大家有幫助。

相關文章:

vue實作的上傳圖片到資料庫並顯示到頁面功能範例

解決使用vue.js路由後失效的問題

js中如何完美的解析資料

以上是詳解react關於事件綁定this的四種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn