詳解react關於事件綁定this的四種方式_javascript技巧
js
react
綁定
在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('The link was clicked.'); return false"> Click me </a> class ActionLink extends React.Component { constructor(props) { super(props); } handleClick(e) { e.preventDefault(); console.log('The link was clicked.'); } 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('del') } 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('del') } 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('del') } 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('del') } render() { return ( <p className="home"> <span onClick={this.del}></span> </p> ); } }
登入後複製
相關推薦:
#以上是詳解react關於事件綁定this的四種方式_javascript技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)