首頁 > web前端 > js教程 > 主體

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

亚连
發布: 2018-05-31 15:54:16
原創
1688 人瀏覽過

這篇文章主要介紹了詳解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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!